Powershell:4 個有趣的腳本來學習如何使用它

Powershell 是一種命令提示符,也是一種程式語言,可讓您自動執行任務、動態排序數量驚人的數據,同時還可以享受樂趣!在這個文件中,我們向您展示了四個有趣且相當有用的腳本範例,至少可以學習如何駕馭新的命令提示字元。

Powershell 現在預設取代經典的命令提示字元 (cmd)自 Windows 10 創意者更新以來。該程式允許您執行 Cmd 可以執行的所有操作,並且還允許經驗豐富的開發人員或嶄露頭角的編碼人員出於好奇創建小腳本或實際編碼並簡化您對電腦的使用。我們嘗試透過這幾個腳本向您展示既有趣又資訊豐富的範例。

這個小腳本可以讓您了解循環的工作原理。複製它並在 Powershell 視窗中運行它可以直接查看結果:

$i="*"
Do {
$i="$i*"
$i
}
While ($true)

你更理解為什麼我們稱這個循環為「星環」。若要中斷程序,請按 鍵Ctrl + C你的鍵盤。這段小程式碼非常有趣,而且可以做更多有用的事情。例如,您可以將星星替換為您喜歡的任何內容。還有其他元素,偶數:

$i=1
Do {
$i
$i++
}
While ($i -le 10)

然後循環將顯示包含在中的數字$1並加 1 只要$i小於 10(因此$i -le 10最後,-能指較小的或者少於用英語講)。也可以透過替換將其轉換為倒數計時++旁邊的$i你會明白這是一個變量,由--。如果您想要火箭起飛式倒數計時,也必須將起始值變更為 10,並在末端加上 0。

如果您希望每次迭代渲染得更慢,例如每隔一秒顯示每個數字,那麼您可以添加一個命令來將程式暫停每個循環一定的毫秒數:

$i=10
Do {
$i
$i--
Start-Sleep -m 1000
}
While ($i -ge 0)

最後,如果您想在每次執行循環中的一小段程式碼時添加蜂鳴聲,請添加[console]::beep(440,100)其中 440 是聲音的頻率(以 Hz 為單位)(它是 A),100 是播放時間。其中給出了以下程式碼:

$i=10
Do {
$i
$i--
[console]::beep(440,100)
Start-Sleep -m 1000
}
While ($i -ge 0)

請注意,在倒數計時的情況下,While(while...) 無法播放循環,直到達到以下值$i是“小於0”,因為$i的值從10開始。-le標竿-ge這意味著大於或高於法語。

使用 Powershell 製作音樂

如果我們告訴您可以使用 Powershell 製作音樂怎麼辦?學習 Powershell 程式語言最有趣的方法之一就是對音樂進行程式設計。直接將歌曲代碼複製到 Powershell 視窗中並輸入主菜處決他們。

《帝國進行曲》

[console]::beep(440,500)
[console]::beep(440,500)
[console]::beep(440,500)
[console]::beep(349,350)
[console]::beep(523,150)
[console]::beep(440,500)
[console]::beep(349,350)
[console]::beep(523,150)
[console]::beep(440,1000)
[console]::beep(659,500)
[console]::beep(659,500)
[console]::beep(659,500)
[console]::beep(698,350)
[console]::beep(523,150)
[console]::beep(415,500)
[console]::beep(349,350)
[console]::beep(523,150)
[console]::beep(440,1000)

“不可能的任務”

[console]::beep(784,150)
Start-Sleep -m 300
[console]::beep(784,150)
Start-Sleep -m 300
[console]::beep(932,150)
Start-Sleep -m 150
[console]::beep(1047,150)
Start-Sleep -m 150
[console]::beep(784,150)
Start-Sleep -m 300
[console]::beep(784,150)
Start-Sleep -m 300
[console]::beep(699,150)
Start-Sleep -m 150
[console]::beep(740,150)
Start-Sleep -m 150
[console]::beep(784,150)
Start-Sleep -m 300
[console]::beep(784,150)
Start-Sleep -m 300
[console]::beep(932,150)
Start-Sleep -m 150
[console]::beep(1047,150)
Start-Sleep -m 150
[console]::beep(784,150)
Start-Sleep -m 300
[console]::beep(784,150)
Start-Sleep -m 300
[console]::beep(699,150)
Start-Sleep -m 150
[console]::beep(740,150)
Start-Sleep -m 150
[console]::beep(932,150)
[console]::beep(784,150)
[console]::beep(587,1200)
Start-Sleep -m 75
[console]::beep(932,150)
[console]::beep(784,150)
[console]::beep(554,1200)
Start-Sleep -m 75
[console]::beep(932,150)
[console]::beep(784,150)
[console]::beep(523,1200)
Start-Sleep -m 150
[console]::beep(466,150)
[console]::beep(523,150)

創造自己的創作

透過剖析我們的命令你可以看到[console]::beep括號內有兩個數字。左邊的數字表示聲音的頻率(例如,A 為 440 Hz),右邊的數字表示聲音應播放的持續時間(以毫秒為單位)。在《不可能的任務》中,我們也看到聲音穿插著指令Start-Sleep -m 150。這一個的意思是“X 毫秒內不要做任何事”:非常適合引入沉默!這是你的——請隨意在評論中分享你的創作!

讓 Powershell 說話

也可以直接在 Powershell 中將文字轉換為語音合成。為此,您必須先透過啟動此命令來載入語音合成模組,然後建立一個新對象$speak這將簡化其使用。這一切都非常簡單,複製以下兩行並在 Powershell 中執行:

Add-Type -AssemblyName System.speech
$speak = New-Object System.Speech.Synthesis.SpeechSynthesizer

然後你可以讓Powershell的語音合成說話:

$speak.Speak("Je donne ma langue au chat")

甚至可以將您的句子即時轉換為 WAV 檔案。這需要透過修改以下命令,然後執行它來以某種方式開啟/開始將檔案儲存到硬碟。然後在完成另一個命令後“關閉”該文件,以便您可以在您選擇的程式中讀取它:

$speak.SetOutputToWaveFile("C:\users\LE\CHEMIN\QUE\VOUS\AUREZ\CHOISI\test.wav")

然後跑幾個$speak.Speak()包含要轉換為文字轉語音的句子,然後執行以下命令關閉檔案:

$speak.Dispose()

如果您不喜歡該語音,可以透過執行以下命令查看已安裝的語音清單:

$speak.GetInstalledVoices().VoiceInfo

複製語音名稱並將其貼上到此命令中以進行更改:

$speak.SelectVoice('LA VOIX QUE VOUS AVEZ CHOISIE')

使用腳本整理 Windows 10 桌面

這個來自 Reddit 的小腳本(感謝 u/Zazierx!)非常實用,我們忍不住與您分享。它既可以讓你了解條件運算子(程式碼相對清晰易讀),又可以將Windows 10桌面以檔案類型組織到資料夾中。將以下程式碼複製並貼上到 Powershell 視窗中並執行:

$pathToUse = "C:\Utilisateurs\$env:username\Bureau"
$video = @(
'3g2','3gp','3gpp','asf','avi','divx','f4v',
'flv','h264','ifo','m2ts','m4v','mkv','mod','mov',
'mp4','mpeg','mpg','mswmm','mts','mxf','ogv','rm',
'srt','swf','ts','vep','vob','webm','wlmp','wmv'
)
$spreadsheets = @(
'csv','ods','xls','xlsx'
)
$images = @(
'arw','bmp','cr2','crw','dcm','dds','djvu','djvu',
'dmg','dng','fpx','gif','ico','ithmb','jp2','jpeg',
'jpg','nef','nrw','orf','pcd','pict','png','psd',
'sfw','tga','tif','tiff','webp','xcf'
)
$presentations = @(
'key','odp','pps','ppsx''ppt','pptm','pptx'
)
$docs = @(
'chm','doc','docm','docx','dot','dotx','eml','eps',
'hwp','log','m3u','odt','pages','pdf','pub','rtf',
'sxw','txt','wpd',' wps','xml','xps'
)
$cadFiles = @(
'dwg','dxf'
)
$misc = @(
'bin','cda','dat','dll','exe','isc',
'img','inf','ipa','kmz','lnk','pes',
'ps','rem','torrent','ttf','vcf'
)
$ebooks = @(
'azw','azw3','epub','fb2''lit','lrf','mbp','mobi',
'opf','prc'
)
$web = @(
'css','htm','html','js','json','php'
)
$arcs = @(
'7z','apk','bz2','cbr','gz','gzip','jar','rar',
'tar','tgz','zip','war'
)
$scripts = @(
'bat','cmd','vb','vbs','vbe','js',
'jse','ws','wsf','wsc','wsh','ps1',
'ps1xml','ps2','ps2xml','psc1','psc2','sql'
)
$files = Get-ChildItem -Path $pathToUse
Foreach ($x in $files){
if($docs.Contains($x.Extension.TrimStart('.').ToLower())){
New-Item -ItemType Directory -Path $pathToUse -Name "Documents" -ErrorAction Ignore
Move-Item -Path $x.FullName -Destination $pathToUse/"Documents"
}
elseif($spreadsheets.Contains($x.Extension.TrimStart('.').ToLower())){
New-Item -ItemType Directory -Path $pathToUse -Name "Spreadsheets" -ErrorAction Ignore
Move-Item -Path $x.FullName -Destination $pathToUse/"Spreadsheets"
}
elseif($images.Contains($x.Extension.TrimStart('.').ToLower())){
New-Item -ItemType Directory -Path $pathToUse -Name "Images" -ErrorAction Ignore
Move-Item -Path $x.FullName -Destination $pathToUse/"Images"
}
elseif($presentations.Contains($x.Extension.TrimStart('.').ToLower())){
New-Item -ItemType Directory -Path $pathToUse -Name "Presentations" -ErrorAction Ignore
Move-Item -Path $x.FullName -Destination $pathToUse/"Presentations"
}
elseif($video.Contains($x.Extension.TrimStart('.').ToLower())){
New-Item -ItemType Directory -Path $pathToUse -Name "Videos" -ErrorAction Ignore
Move-Item -Path $x.FullName -Destination $pathToUse/"Videos"
}
elseif($cadFiles.Contains($x.Extension.TrimStart('.').ToLower())){
New-Item -ItemType Directory -Path $pathToUse -Name "CAD Files" -ErrorAction Ignore
Move-Item -Path $x.FullName -Destination $pathToUse/"CAD Files"
}
elseif($misc.Contains($x.Extension.TrimStart('.').ToLower())){
New-Item -ItemType Directory -Path $pathToUse -Name "Misc" -ErrorAction Ignore
Move-Item -Path $x.FullName -Destination $pathToUse/"Misc"
}
elseif($ebooks.Contains($x.Extension.TrimStart('.').ToLower())){
New-Item -ItemType Directory -Path $pathToUse -Name "E-Books" -ErrorAction Ignore
Move-Item -Path $x.FullName -Destination $pathToUse/"E-Books"
}
elseif($web.Contains($x.Extension.TrimStart('.').ToLower())){
New-Item -ItemType Directory -Path $pathToUse -Name "Web" -ErrorAction Ignore
Move-Item -Path $x.FullName -Destination $pathToUse/"Web"
}
elseif($arcs.Contains($x.Extension.TrimStart('.').ToLower())){
New-Item -ItemType Directory -Path $pathToUse -Name "Archives" -ErrorAction Ignore
Move-Item -Path $x.FullName -Destination $pathToUse/"Archives"
}
elseif($scripts.Contains($x.Extension.TrimStart('.').ToLower())){
New-Item -ItemType Directory -Path $pathToUse -Name "Scripts" -ErrorAction Ignore
Move-Item -Path $x.FullName -Destination $pathToUse/"Scripts"
}
elseif($x.Directory){
New-Item -ItemType Directory -Path $pathToUse -Name "Other - misc" -ErrorAction Ignore
Move-Item -Path $x.FullName -Destination $pathToUse/"Other - misc"
}
else{
Write-Host $x
}
}

透過一些小的修改,您可以輕鬆地組織任何文件。您還知道其他有趣的 Powershell 腳本嗎?在本文的評論中分享它們!