鐵人第28天,這篇是雜記PowerShell仿Linux Command一些小筆記,說起來PowerShell借鑑了Perl的最重要的變數$_
,上手相對快。如後面範例中,找出超過三天的Log並刪除,在取得每個檔案最後修改時間就用了$_
變數。
首先本機是用Mac開發,是可以透過brew安裝PowerShell,最初安裝到PowerShell 6,在MacOS升到10.13以上,才能升到PowerShell 7,而這兩個版本在Mac路徑也不同。
6的路徑為:/usr/local/microsoft/powershell/6.0.0-beta.5/powershell,指令為powershell
7的路徑為:/usr/local/microsoft/powershell/7/pwsh,指令是pwsh,就很符合Linux對sh的命名習慣。
Get-ChildItem –Path "C:\apache-tomcat-9.0.0.M21\logs" -Recurse | Where-Object {($_.LastWriteTime -lt (Get-Date).AddDays(-3))} | Remove-Item
Get-WmiObject Win32_Process | Select-Object ProcessId, Name, @{Name="ReadOperationCount";Expression={$_.ReadOperationCount}}, @{Name="WriteOperationCount";Expression={$_.WriteOperationCount}}
下例用outlook去查:
New-TimeSpan -Start (get-process "outlook").StartTime
$fso = Get-ChildItem -Recurse -path C:\fso
$fsoBU = Get-ChildItem -Recurse -path C:\fso_BackUp
Compare-Object -ReferenceObject $fso -DifferenceObject $fsoBU
Get-Content -Path "D:\a.log" -Wait -Tail 10
-Wait參數其實就做到了,但若不設-Tail來顯示尾十筆,假設log檔很大,從頭down到尾的時間要花很久。
$standalone = [xml](Get-Content .\standalone.xml)
$standalone.server.profile.subsystem.server."https-listener".setAttribute("enabled-protocols", "TLSv1.2,TLSv1.3")
$standalone.Save("C:\JBoss\sttandalone\configuration\standalone.xml")
Cortana是Windows 10、11的語音智慧助理,但在公司電腦上常是礙事的跳出錯誤視窗。所以一勞永逸的移除作法是用PowerShell指令
PS C:\WINDOWS\system32> Get-AppxPackage -allusers Microsoft.549981C3F5F10 | Remove-AppxPackage
PS C:\WINDOWS\system32> Get-appxPackage -allusers Microsoft.549981C3F5F10 | Remove-AppxPackage
兩道指令一模一樣,差在Get-AppxPackage和Get-appxPackage有個A分大小寫
無法像DOS一樣用set ROOT=.。而是類似Perl作法
$env:ROOT = ‘.’
值的部份要用單引號或雙引號括起。
GCI D:\Tomcat\* -Recurse | Select-String "dummy"
# 或者
Get-ChildItem D:\Tomcat\* -Recurse | Select-String -Pattern "dummy"
Get-ChildItem ‘D:\Temp\*.log’ -Recurse | ForEach { (Get-Content -Encoding UTF8 $_ | ForEach { $_ -replace ‘old’, ‘new’}) | Set-Content -Encoding UTF8 $_ }