2018-11-15

Windows'da sembolik ve hard link'ler

Windows'da kısayol yaratmanın düz yolu kısayolu kopyalayıp, yapıştırırken "kısayol yapıştır"ı seçmek. Bu şekilde aslında lnk uzantılı bir dosya yaratılır. Bu kısayol çift tıklandığında bu bu lnk uzantılı dosyanın işaret ettiği dosya çalıştırılır.

Bundan başka bir de sembolik link yaratma var. C:\Windows\system32\notepad.exe'nin sembolik linkini yaratmak için komut satırında şunları yazmak gerek (mklink'i yönetici hakları ile çalıştırarak):
mklink notdefteri C:\Windows\system32\notepad.exe
Bu iki yöntem ile mevcut klasörde yaratılan dosyaların farkı aşağıdaki gibi olacak
15.11.2018  13:27    <SYMLINK>      notdefteri [C:\Windows\System32\notepad.exe]
15.11.2018  13:28             1.191 notdefteri.lnk
İlki sembolik kısayol (<SYMLINK> olarak görülüyor), diğeri "kısayolu yapıştır" yöntemi ile oluşturulan.

Bir klasörün sembolink link'ini oluşturmak için /D anahtarı kullanılmalı.

mklink /D Belgelerim C:\Users\metin\Documents

Bu yöntemle oluşturulan kısayol şöyle gözükür (<SYMLINKD>):
15.11.2018  13:34    <SYMLINKD>     tf [E:\testfolder]
Sembolik linkler silinse bile notepad.exe dosyası silinmez. Çünkü bunlar asıl notepad.exe dosyasını gösteren işaretçilerdir. Ama notepad.exe silinirse o zaman sembolik linkler anlamsız birer işaretçi olurlar.

Dosya sistemindeki sembolik linkleri bulmak için dir komutunu /AL ile kullanmak gerek:
dir /AL
Eğer bir klasörün alt klasörlerindeki bütün dosyaları bulmak istiyorsak
dir /AL /S C:\Users
kullanılabilir. Aynı şeyi powershell ile yapmak istersek
Get-ChildItem | where {$_.Attributes -match "ReparsePoint"}
Powershell ile dir komutu (Get-ChildItem) kullanıldığında ilk sütunda görüntülenen Mode alanındaki dosyanın öznitelikleri (attributes) listelenir. Bu özniteliklerden en sağdaki veri dosyanın bir reparsepoint olup olmadığını gösterir. Sembolik linkler için bu kısımda bir "l" harfi gösterilir. Örnek:
Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d----l       15.11.2018     13:34                tf
-a---l       15.11.2018     13:27              0 notdefter
Bundan başka bir de hard link'ler var. Bunun için mklink'i  /H anahtarını ile kullanmak lazım:
mklink /H hardlink dosya.exe
Bunun sonucunda diskin üzerindeki aynı veriyi gösteren iki dosya sistemi girişimiz olur. Bunlardan biri silinse bile asıl dosya verisi silinmez. Hard link'in hedefi aynı disk bölümü içinde olmalıdır.

Hard link'ler klasörler için olmaz. Klasörler için benzer kavram junction'dır. Başka bir disk bölümünde yer alan klasör için junction yaratılabilir. Örnek:
mklink /J junction D:\testfolder
Bu konuları özetlemek için ss64.com sitesinden alınma aşağıdaki tablo faydalı olabilir:

Windows komut satırından exe dosyası sürüm numarası sorgulama

Hızlı bir şekilde, çoğunlukla da uzaktaki bir sistemdeki bir exe dosyasının sürüm bilgisini öğrenmek istediğimde şu yöntemlerden birini kullanıyorum.

Düz Windows ortamı, ek bir araç kullanmadan, doğrudan komut satırından:

wmic datafile where name='C:\\windows\\notepad.exe' get Version
Bu yöntem ile ağ üzerinden uzaktaki dosya sorgusu mümkün değil. datafile parametresi UNC yolları desteklemiyor.

Ağ üzerinden sorgu yapabilmek için Sysinternals'ın sigcheck komutuna ihtiyaç var. Kullanım şöyle:
sigcheck -nobanner -n \\uzakbilgisayar\c$\Windows\notepad.exe
Powershell ile yapmak için ise
(Get-Item \\uzakbilgisayar\c$\Windows\notepad.exe).VersionInfo.Fileversion
kullanılabilir.

2018-10-23

İnternet ve kısayollar

İnternette dolaşırken sıkça kullanmaya başladığım birkaç kısa yol şöyle:

DuckDuckGo kısayolları
h : Arama kutusuna git, arama metnini seç
j veya alt ok : arama sonuçlarında aşağıya git (odağı kazanmamışsa sayfada boş bir yere tıklamak gerekebilir)
k veya üst ok : arama sonuçlarında yukarıya git
t : arama sonuçlarında en üste git
l (küçük L harfi) veya o (küçük O harfi) : seçili arama sonucunu aç

Youtube
Herhangi bir youtube videosunu izlerken Shift+? kısayollar listeler.
boşluk çubuğu : oynatmayı duraklat / devam ettir (odak videoda olmalı)
k : oynatmayı duraklat / devam ettir (odağın videoda olmasına gerek yok)
m : videoyu sessize al
c : altyazılar varsa etkinleştir
sola ok : videoda 5 saniye geriye git
j : videoda 10 saniye geriye git
sağa ok : videoda 5 saniye ileriye git
l (küçük L harfi) : videoda 10 saniye ileriye git
yukarı ok : sesi artır
aşağı ok : sesi azalt
0 (sıfır) : videonun başına git
1-9 : video'nun sırasıyla %10, %20, ... %90'ına atla
ö veya / : youtube'un arama kutusuna git
Shift + N : oynatma listesinde bir sonraki videoya atla
Shift + P : oynatma listesinde bir önceki videoya atla
Ctrl + sağ ok : videonun ilerleme çubuğunda görülen bir sonraki bölümüne atla
Ctrl + sol ok : videonun ilerleme çubuğunda görülen bir önceki bölümüne atla
> veya Shift + . : oynatma hızını artır
< veya Shift + , : oynatma hızını düşür
. / , : (duraklatılığında) videoda 1'er kare olarak ileri veya geri git
t : Sinema modunu aç veya kapat
i : mini oynatıcıya geç
---
[1] https://duck.co/help/features/keyboard-shortcuts
[2] https://support.google.com/youtube/answer/7631406?hl=en

2018-07-23

archlinux kablosuz ağ şifresini güncelleme

İlk archlinux kurulumumda, wifi şifresini değiştirdikten sonra ağ bağlantısı sorunu yaşamaya başladım. Bilgisayarım bir türlü şifresi değişen kablosuz ağa bağlanmıyordu. Archlinux forumlarındaki şu sayfada faydalı birkaç öneri verilmiş.

Kablosuz erişim noktası üzerindeki kablosuz ağ şifremi değiştirdikten sonra /etc/netctl klasörü altında profil dosyama girip şifremi güncellemiştim. Benimki için dosya adı
/etc/netctl/wlo1-Deneme
idi. Dosyanın içinde Key ile başlayan satırdaki şifreyi güncelledikten sonra
sudo netctl start wlo1-Deneme
komutu ile profilimi başlatmayı denediğimde şöyle bir hata alıyordum:

Job for netctl@Deneme.service failed because the control process exited with error code. 
See "systemctl status netctl@Deneme.service" and "journalctl -xe" for details.

Forumdaki yüce kişilik öncelikle bu hatanın birden fazla IP otomatik ayarlaması yapan hizmetin çalışması ile ilgili olabileceğini farkederek bu kontrolü yaptırmış:
ls -l /etc/systemd/system/multi-user.target.wants 
 Klasörünün altındaki hizmetleri listeletmiş. Benimkinde de dhcp hizmetine ait bir öğe vardı. Önce onu kaldırdım:
systemctl disable dhcpcd.service systemd-networkd.service wicd.service
Daha sonra bilgisayarımı tekrar başlattım. Bilgisayarım tekrar başladıktan sonra netctl komutlarına daha önceki gibi hata vermeyi bıraktı. Artık wifi şifremi değiştirdikten sonra ilgili profil dosyamdaki şifreyi değiştirip sonrasında
netctl stop wlo1-Deneme
ve ardından (bazı durumlarda ip link set wlo1 up gerekebilir)
netctl start wlo1-Deneme
yapmam yetiyor :)

Ek 2019-05-29: Bilgisayarımın bağlandığı varsayılan wifi ağını değiştirdim. Archlinux, hala eski ağa bağlanmaya çalışıyor. Yenisine otomatik olarak bağlanmıyor. Şu adımları izledim:
sudo netctl disable wlo1-EskiAg
sudo netctl enable wlo1-YeniAg
Bu şekilde /etc/systemd/system/multi-user.target.wants  altındaki varsayılan bağlantı değiştirilir.

Archlinux ve pacman

Ubuntu ve Fedora'nın ardından yeni favorim Archlinux. Bir deneme yapabilmek için diskimde yeni bir bölüm oluşturdum, manuel kurulumu tamamladım. Komut satırı, AUR ve pacman ile biraz daha yakın ilişkim olacak, orası kesin.

Pacman'i biraz özetlemek benim için faydalı olacak.

Öncelikle söylenen o ki pacman, apt ve dnf'e kıyasla daha hızlı. Ama ihtiyaç duyulan parametreler biraz daha içgüdüden uzak. Kendi içinde bir yapısı var elbette, ama öğremek zaman alacak.

 Pacman'da işlemler 5 ana kategoride:

-Q : (Query) pacman veritabanını sorgula
-R : (Remove) sistemden paket kaldır
-S : (Sync) paketleri senkronize et
-U : (Upgrade) Sistemdeki paketleri güncelle
-F : (File) sistemde kurulu dosyaların içinde sorgu çalıştır

Query (-Q) işlemleri için kullanılabilecek anahtarlar:
-i : Kurulu paket ile ilgili bilgileri göster. Örneğin
pacman -Qi firefox
-k : Bir pakedin sahip olduğu dosyaları kontrol et. Ayrıntılı kontrol için -kk kullanılabilir.
-l : Bir paketin sisteme kurduğu dosyaları göster
-o : Bir dosyanın sahibi olan paketi ara
-s : Kurulu paketlerin arasında bir paket ismi ara
-e : explicit : sistemin kurduğu değil, kullanıcı tarafından kurulan programları listele.
-q : Quiet. sürüm no gibi ek bilgileri gösterme, sadece paket isimlerini listele.
-n : Sadece ana repo'lardan kurulan programları listele.
-m: AUR'dan kurulan programları listele.
-d : dependencies. Başka bir programın alt bağımlığı olarak kurulan programları listele.
-t : unrequired. gereksinim duyulmayan paketleri listele.
-dt: genelde ihtiyaç duyulmayan paketleri listelemek için ikisi beraber kullanılır.

vlc kurulu mu değil mi öğrenmek için:
pacman -Qs vlc


Remove (-R) işlemleri için kullanılabilecek anahtarlar:
-s : recursive. bir paketi ve o paketle gelen tüm alt bağımlılıkları kaldırmak için
-u : unneeded. gereksiz paketleri de kaldır
-n : paketle beraber gelen sistem yapılandırma dosyalarını da sil
-s : yapılandırma dosyalarını da sil

Dolayısıyla thunderbird ile gelen bütün herşeyi kaldırmak için gereken komut:

pacman -Rnu thunderbird
olabilir.

Sync (-S) anahtarları:
-c : clean, yerel belleği temizle
-i : Kurulu olmayan paket ile ilgili bilgileri göster
-l : list
-q : quiet. Ekstra ayrıntılara (sürüm no, repo adı vs) girmeden sadece isimleri listele.
-s : search. depolarda arama yap.

Depolarda chromium aramak için
pacman -Ss chromium
-y : refresh. depolardan paket listesini tekrar indir (-Syy : liste yeniyse bile tekrar indir)
-u : upgrade. Tüm kurulu paketleri güncelle (-Suu: depodaki paket kurulu sürümden eskiyse bile güncelle)
-w : indir, ama kurma

File system (-F) işlemleri ile kullanılabilecek anahtar:
-s : search. Diskte kurulu bir dosyayı hangi paket kurmuş Bu artık (2024-02-27) yok. Bu işlev yerine sadece -F kullanılmalı.
-yy : force update. Henüz yeni güncellenmiş olsa da yine de paket listesini güncelle.
pacman -Fy
pacman -F libmozgtk.so
pacman -F /usr/lib/firefox/libmozgtk.so

Yukarıdaki ilk adımda pacman'in dosya/paket listesini güncellemesini, ikinci adımda libmozgtk.so dosyasının hangi paketlerde bulunabileceğini, üçüncü adımda ise tam yolu verilen dosyanın hangi paketlerde bulunabileceğini sorguluyoruz. Buna benzer bir işlev pkgfile ile de sunuluyor:

pkgfile lsb-release
pkgfile /etc/lsb-release
Genel bir anahtar: 
-p : işlemi yapmaktansa sadece işlemin uygulanacağı paket adını yaz.

Birkaç örnek üzerinden gidelim:

pacman -Syy // yerel paket verisini sunucularla eşleştir (sync)
pacman -Syu // tüm paketleri güncelle
pacman -Ss firefox // repository'lerde adında firefox geçen paket ara
pacman -Ssq ^firefox$ // tam adı firefox olan paketi ara, ayrıntısız
pacman -S firefox // firefox'u depolardan kur
pacman -S extra/firefox // belli bir depodan kur
pacman -U /home/user/package // sistemdeki yerel dosyayı kur
pacman -U http://github/... // bir URL'den dosya kur
pacman -S gnome // gnome paket grubunu kur
pacman -R firefox // bir paket kaldır
pacman -Rs apache // bir paket ve tüm alt bağımlılıklarını kaldır
pacman -Rns $(pacman -Qtdq) // sistemdeki tüm kullanılmayan paketleri temizle/kaldır
pacman -Ru gnome // tüm gnome paket grubunu kaldır
pacman -Q | more // tüm kurulu paketleri listele
pacman -Ql apache // apache tarafından kurulan tüm dosyaları listele
pacman -Ss chromium // depolarda bir paket ara
pacman -Qs firefox // kurulu paketlerin içinde bir paket ara
pacman -Si chromium // kurulu olmayan bir paket hakkında bilgileri göster
pacman -Qi apache // kurulu bir paket ile ilgili bilgileri göster
pacman -Qk // kurulu paketlerin dosya bütünlüğünü kontrol eder. 
Kurulu olması gereken dosyalar kurulu mu, yetkilendirme doğru mu, bakar.
pactree apache // bir paket ile ilgili bağımlılık ağacını göster
pacman -Qdt // artık gerekli olmayan paketleri listele
pacman -Sc  // cache verileri temizle
pacman -Scc // cache belleğe alınan paketleri sil
pacman -Qo netctl // netctl dosyasını hangi paket kurmuş göster
pacman-optimize // optimize pacman

Ayrıca pacman'in yapılandırmasını /etc/pacman.conf dosyasını düzenleyerek de yapabiliriz. Örneğin şu ayarlar mümkün:

Color # renkli çıkış
CheckSpace # indirme yaparken her seferinde diskte boş yer var mı kontrol et

VerbosePkgList # kurulacak paketler ile ilgili ayrıntılı bilgi
TotalDownload # dosya bazında değil, tüm indirmelerin ne kadarının tamamlandığını göster


2021-12-23 ek:

Kurulu çekirdekleri listelemek için:

$ pacman -Qsq ^linux | grep -E '^linux[0-9]{2,3}$'

veya

$ ls -l /boot/vmlinux*

ve hatta sadece Manjaro'ya özel

$ mhwd-kernel -li

kullanılabilir.

---

https://wiki.archlinux.org/title/Pacman/Tips_and_tricks

2018-07-09

Komut satırından harici IP adresi bulmak

Arch linux kurulumu sırasında harici IP adresimi bulmak istedim. Aradığımda aşağıdaki gibi sonuçlara ulaştım:

OpenDNS ile:

dig +short myip.opendns.com @resolver1.opendns.com
Bu sayede öğrendim ki OpenDNS sunucuları üzerinde myip.opendns.com için yapılan sorgularda sorguyu yapan istemcinin adresi dönüyormuş.

Web Hizmeti ile:

Aynı  www.whatismyip.com gibi bir sayfaya girerek bakmak gibi, ama düz metin olarak IP dönüyor:
curl -S http://whatismyip.akamai.com

Elbette şu sayfada whatismyip.akamai.com için alternatifler de verilmiş.

2021 güncellemesi: Şu video'da gördüm ki

curl ifconfig.me

gibi daha da basit olabiliyormuş.

2022 güncellemesi: Yeni bir alanadı

    curl echoip.xyz 

ya da

    curl ipecho.net/plain

ya da

  curl icanhazip.com 

belki de

  curl ifconfig.io 

hatta

  curl wtfismyip.com/text (json da var)

ve hatta

  iwr api.ipify.org 

Bir de bunları Windows'da yapmanın yollarını bulmak istedim. dig'in Windows eşdeğeri (basit bir DNS sorgusu yapmak aslında) nslookup veya Resolve-DnsName olabilir:

nslookup myip.opendns.com resolver1.opendns.com
Ama bu komut sonunda tek satırlık bir hedef dönmüyor, en alt satırdaki sonuca odaklanmak lazım.

Ya da Powershell eşdeğerini kullanarak
PS> (Resolve-DnsName -Name myip.opendns.com -Server resolver1.opendns.com).IPAddress
Curl'un eşdeğerini aradığımda da zaten curl diye bir alias'ı bulunan Invoke-WebRequest cmdlet'ini gördüm. Sadece IP adresini döndürmek için alias'ı kullanarak:
PS> curl http://whatismyip.akamai.com | select -ExpandProperty content

2018-06-01

Windows'da güncelleştirmeleri komut satırından yükleme

Linux ile fazla içli dışlı olunca insan Windows'da da aynı şeyleri arıyor. Linux'taki bütün güncellemelerin komut satırından yönetilmesi çok güzel. Powershell ile bunu Windows'da yapmayı bulunca çok hoşuma gitti.

Sanıyorum sürüm 3'ten beri Powershell'de PoweShellGet adında bir sağlayıcı (provider) bulunuyor. Bu sağlayıcı aracılığıyla bazı ek paketler (packages) yüklenebiliyor. Bunlardan biri de PSWindowsUpdate paketi.

Öncelikle PowerShell ile gelen modülleri görelim:

PS> Get-Module -ListAvailable

    Directory: C:\Program Files\WindowsPowerShell\Modules


ModuleType Version    Name                   ExportedCommands
---------- -------    ----                   ----------------
Script     1.1.7.2    PackageManagement      {Find-Package, Get-Package, ...
Manifest   2.0.2      Posh-SSH               {Get-SCPFile, Get-SCPFolder, ...
Script     1.6.5      PowerShellGet          {Find-Command, Find-DSCResource, ...
Binary     2.0.0.4    PSWindowsUpdate        {Enable-WURemoting, Get-WUJob, ...


    Directory: C:\Windows\system32\WindowsPowerShell\v1.0\Modules


ModuleType Version    Name                   ExportedCommands
---------- -------    ----                   ----------------
Manifest   1.0.0.0    ActiveDirectory        {Add-ADCentralAccessPolicyMember,...
Manifest   1.0.0.0    AppBackgroundTask      {Disable-AppBackgroundTaskDiagnosticLog, ...
Manifest   2.0.0.0    AppLocker              {Get-AppLockerFileInformation, ...


Liste bu kadar değild, kısa kestim. Burada kalın olarak vurguladığım kısım, bahsettiğim PowerShellGet modülü. Yanında bu modül ile gelen cmdlet'ler listelenmiş. Ben bunu güncellediğim için sürüm 1.6.5 gözüküyor. Güncellemek için

PS> Install-Module -Name PowerShellGet

kullanmak gerek. Tüm kurulumlar için yönetici yetkileri gerek. Ayrıca bu adımda NuGet'i de kurmak isteyecek, izin vermek durumundayız. Bunu yapınca sistemde 2 tane PoweShellGet olabilir, eski sürümü

$env:ProgramFiles\WindowsPowerShell\Modules\PowerShellGet

konumundan silebiliriz. Aslında Update-Module diye de bir cmdlet var, ama sadece Install-Module ile kurulan modüller Update-Module kullanarak güncellenebiliyormuş

Sonrasında PowerShellGet sağlayıcısının içinde ne gibi paketler var diye bakmak için Find-Package cmdlet'ini kullanabiliriz (öncesinde execution policy'yi remotesigned olarak ayarlamak gerekebilir):

Find-Package -ProviderName PowerShellGet

Bende 2820 tane paket çıktı. Bu paketlerden biri de PSWindowsUpdate. Yüklemek için şu komudu kullandım:

Install-Package -Name PSWindowsUpdate

Birkaç saniye içinde kuruldu. Bu paket ile acaba hangi komutlar geldi?

PS> Get-Command -Module PSWindowsUpdate

CommandType     Name                                 Version    Source
-----------     ----                                 -------    ------
Alias           Download-WindowsUpdate               2.0.0.4    PSWindowsUpdate
Alias           Get-WUInstall                        2.0.0.4    PSWindowsUpdate
Alias           Get-WUList                           2.0.0.4    PSWindowsUpdate
Alias           Hide-WindowsUpdate                   2.0.0.4    PSWindowsUpdate
Alias           Install-WindowsUpdate                2.0.0.4    PSWindowsUpdate
Alias           Show-WindowsUpdate                   2.0.0.4    PSWindowsUpdate
Alias           UnHide-WindowsUpdate                 2.0.0.4    PSWindowsUpdate
Alias           Uninstall-WindowsUpdate              2.0.0.4    PSWindowsUpdate
Cmdlet          Add-WUServiceManager                 2.0.0.4    PSWindowsUpdate
Cmdlet          Enable-WURemoting                    2.0.0.4    PSWindowsUpdate
Cmdlet          Get-WindowsUpdate                    2.0.0.4    PSWindowsUpdate
Cmdlet          Get-WUApiVersion                     2.0.0.4    PSWindowsUpdate
Cmdlet          Get-WUHistory                        2.0.0.4    PSWindowsUpdate
Cmdlet          Get-WUInstallerStatus                2.0.0.4    PSWindowsUpdate
Cmdlet          Get-WUJob                            2.0.0.4    PSWindowsUpdate
Cmdlet          Get-WULastResults                    2.0.0.4    PSWindowsUpdate
Cmdlet          Get-WURebootStatus                   2.0.0.4    PSWindowsUpdate
Cmdlet          Get-WUServiceManager                 2.0.0.4    PSWindowsUpdate
Cmdlet          Get-WUSettings                       2.0.0.4    PSWindowsUpdate
Cmdlet          Get-WUTest                           2.0.0.4    PSWindowsUpdate
Cmdlet          Invoke-WUJob                         2.0.0.4    PSWindowsUpdate
Cmdlet          Remove-WindowsUpdate                 2.0.0.4    PSWindowsUpdate
Cmdlet          Remove-WUServiceManager              2.0.0.4    PSWindowsUpdate
Cmdlet          Set-WUSettings                       2.0.0.4    PSWindowsUpdate
Cmdlet          Update-WUModule                      2.0.0.4    PSWindowsUpdate


Şimdi Windows güncellemelerini kontrol edelim:

PS> Get-WindowsUpdate

Bu aşamada her güncelleştirme için status sütununda bazı kısatlamar yer alacak. Bunların anlamları şöyle:

[A|R]DIMHUB:
A: Accepted (kabul edilmiş)
R: Rejected (kabul edilmemiş)
D: Downloaded (indirilmiş)
F: Download failed (indirme başarısız)
?: Invoked (sanıyorum kurulumuna başlanmış ve devam eden)
I: Installed (kurulmuş)
R: Reboot required (tekrar başlatma bekleniyor)
M: Mandatory (zorunlu)
H: Hidden (gizlenmiş)
U: Uninstallable (kaldırılabilir)
B: Beta (test aşamasında)

Bu güncellemelerin tümünü indirip kurmak istiyorsak şunu yapabiliriz:

PS> Get-WindowsUpdate -AcceptAll -Install -

Ya da belli birkaç güncelleştirmeyi saat 23:30'da kurmak üzere zamanlamak ve sonrasında gerekiyorsa otomatik olarak tekrar başltmak için:

PS> Get-WindowsUpdate -KBArticleID KB7585315 -AcceptAll -Install -ScheduleJob (Get-Date -Hour 23 -Minute 30 -Second 0) -AutoReboot

Tüm bu komutların -ComputerName anahtarını kullanarak uzak bir veya birkaç bilgisayarda da yapabiliriz.

PowershellGet altında dikkatimi bir paket daha çekti: PSScreenFetch. Linux altındaki screenfetch'in bir benzeri olabilir mi diye bir de bunu kurayım dedim:

PS> Install-Package -Name PSScreenFetch

Sonrasında da bu paket ile acaba hangi komutlar geldi diye baktım:

PS> Get-Command -Module PSScreenFetch

CommandType           Name                  Version  Source
--------------------  -----                 -------  ------
Function              Invoke-PSScreenFetch  0.0.3    psscreenfetch

Gelen Invoke-PSScreenFetch'i çalıştırdım ve sürpriz...


Windows için screenfetch! Tek kötü tarafı, sadece Windows 10'da çalışıyor. Madem yaptınız, az daha uğraşıp diğer sürümlerde de çalıştırsaydınız ya... :/

---

https://woshub.com/pswindowsupdate-module/