doctordeploylogo
  [ Prev ] [ Next ] | [ Home ] [ Sitemap ] .. -... .. -.- .-. .- ... ...

Unix Tools in Powershell

12/2016

Nicht nur für heterogene Umgebungen und Admins gilt: Der Mensch ist faul und stellt sich ungern um. :)

Von daher wäre es doch schön, wenn man unter Windows die geliebten, bewährten Unix Tools (ohne Installation von Cygwin o.ä.) benutzen könnte. Nun, das ist einfacher als vielleicht gedacht, denn Powershell bietet schliesslich um Längen mehr als Bash+Tools:

Zuerst mal gibt es etliche Aliase in Powershell, die Unix Toolnamen auf Cmdlets umbiegen:

ls ebenso wie "gci" ein Alias auf "Get-ChildItem"
ps Alias auf "Get-Process"
cp Alias auf "Copy-Item"
mv Alias auf "Move-Item"
kill Alias auf "Stop-Process"
sort Alias auf "Sort-Object"
diff Alias auf "Compare-Object"
tee Alias auf "Tee-Object"
write Alias auf "Write-Output"
cat Alias auf "Get-Content"
wget Alias auf "Invoke-WebRequest"
fc siehe "h"/"r" bzw. "Get-History"/"Invoke-History"
man Alias auf "help"

Sämtliche Aliase bekommt man mit "alias" oder "Get-Alias" angezeigt. Einzelne Aliase z.B. mit "gal cp", mehrere mit "gal c*".

Andere Unix Tools muss man sich z.B. über functions in der ProfileScript-Datei definieren:

df (disk free)

function df { gdr -psprovider filesystem | ft -autosize}

Alternativ: gwmi win32_logicaldisk | ft -autosize

free

function free { gwmi win32_operatingsystem | select CSName, Caption, SerialNumber, OSArchitecture, TotalVisibleMemoryS
ize, FreePhysicalMemory, FreeVirtualMemory }

grep
Siehe Grep in Powershell

du (disk usage)

function psdu ($seldir) { gci $seldir -directory | %{$dirname=$_.fullname; gci $_.fullname -r -force | measure-object
-property length -sum | select @{Name="Dirname";Expression={$dirname}}, count, @{Name="SizeMB";Expression={"{0:N2}" -f
($_.sum/1MB)}}} }

Etwas mehr Aufwand, da wir Parameter annehmen und die Summe in MB umrechnen. Dafür kann man dann aber nach Verzeichnisgröße sortieren.
Die Funktion ist auf die erste Unterverzeichnisebene beschränkt und wird z.b. mit "psdu \\serv1\hudel" oder einfach mit "psdu" für das aktuelle Verzeichnis aufgerufen.

Tipp: Bei größeren Verzeichnissen ist ein "psdu c:\largedir | ogv" hilfreich.
Ebenso kann man mit "psdu c:\largedir | epcsv $env:temp\export.csv" in eine CSV-Datei exportieren.

Warum "psdu" und nicht "du"?
Damit man parallel auch das Sysinternal'sche "du" benutzen kann.