PowerShell'de String'i Komut Olarak Çalıştırma [4 Yol]
Invoke-Expression Cmdlet'ini kullanma
Bir dizeyi PowerShell'de komut olarak çalıştırmak için Invoke-Expression cmdlet'ini kullanın. Invoke-Expression cmdlet'i, dizeyi komut olarak değerlendirir ve dize ifadesinin sonucunu döndürür.
İşte basit bir örnek:
Kullanım ve Operatör:
$command = "notepad.exe"
Invoke-Expression $commandBu yeni not defteri penceresi açılacaktır.
İşte daha karmaşık bir örnek.
Invoke-Expression Cmdlet'ini kullanın:
$command = "Get-Process | Sort-Object -Property CPU -Descending | Select-Object -First 5"
Invoke-Expression -Command $commandÇıkış:
Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName
------- ------ ----- ----- ------ -- -- -----------
1456 205 329656 294348 670.89 6328 3 Grammarly.Desktop
2564 67 326064 354484 503.28 12276 3 chrome
524 24 776508 798760 444.05 1248 3 chrome
644 17 7196 21308 400.55 12324 3 SynTPEnh
1420 41 315816 308592 394.67 8188 3 chromeInvoke-Expression, bir dizeyi PowerShell ifadesi olarak değerlendirerek geçerli herhangi bir PowerShell komutunu veya betiğini yürütmenize olanak tanır. Örneğin yukarıdaki kod şu şekilde çalışmaktadır:
Get-Process: Sistemde o anda çalışan işlemlerin bir listesini alır.Sort-Object -Property CPU -Descending: İşlemlerin listesiniCPUözelliğine göre (her işlem için CPU kullanımını temsil eden) azalan düzende sıralar.Select-Object -First 5: Sıralanmış işlem listesinden ilk beş öğeyi seçin.
$command değişkeninde komutu tanımladıktan sonra, $command'da saklanan komutu yürütmek için Invoke-Expression cmdlet'ini kullanırız. Bu kodun çıktısı, en yüksek CPU kullanımına sahip ilk 5 işlemin azalan düzende sıralanmış bir listesidir.
& Operatörünü Kullanma
PowerShell'de bir dizeyi komut olarak çalıştırmak için & operatörünü kullanın
Kullanım ve Operatör:
$command = "notepad.exe"
& $commandÇağrı operatörü &, bir komutu sanki bir komut adı veya işleviymiş gibi çağırır. Bu, bir değişkende saklanan bir komutu yürütmenize veya geçerli kapsam veya yolda olmayan bir komutu çalıştırmanıza olanak tanır. Örneğin yukarıdaki kod şu şekilde çalışmaktadır:
$commanddize değişkeni yürütülebilir bir dosyayla (bu örnektenotepad.exe) başlatılır.- Bundan sonra,
$command'da saklanan komutu yürütmek için çağrı operatörü (&) kullanıldı. Bu, PowerShell'e$command'da belirtilen yürütülebilir dosyayı çalıştırmasını söyler. Bu durumda Not Defteri uygulamasını başlattı.
Çift Tırnak Kullanımı ("")
PowerShell'de bir dizeyi komut olarak çalıştırmak için Çift Tırnak kullanın.
Çift Tırnak Kullanın:
$filename = "File1.txt"
$command = "Get-Process | Out-File -FilePath <code>"E:\$filename</code>""
Invoke-Expression -Command $commandFile1.txt Dosyasının İçeriği:
Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName
------- ------ ----- ----- ------ -- -- -----------
507 20 8804 16768 13328 0 AppHelperCap
773 43 36872 48716 9.02 1212 3 ApplicationFrameHost
318 17 3700 14256 3388 0 armsvc
315 16 105520 19700 0.34 3760 0 audiodg
555 24 409364 392232 505.98 1248 3 chrome
399 32 24192 47240 120.28 2476 3 chrome
255 16 18168 35456 0.23 5224 3 chrome
260 17 43572 65600 18.72 7476 3 chrome
1335 33 244596 226076 508.02 8188 3 chrome
... ... ... ... ... ... ...
... ... ... ... ... ... ...
... ... ... ... ... ... ...
Yukarıdaki kod şu şekilde çalışmaktadır:
$filenamedize değişkeni oluşturulur veFile1.txtolarak ayarlanır.- Daha sonra
$commanddeğişkeni, çalışan işlemlerin bir listesini almak ve bunları E:'de belirtilen dosya adına sahip bir dosyaya yazmak için PowerShell komutunu içeren bir dizeye ayarlanır. sürmek. Out-Filecmdlet'i,Get-Processcmdlet'inin çıktısını belirtilen dosya adına sahip bir dosyaya yazmak için kullanılır. Geri tırnak işaretleri (`) dize içindeki çift tırnak işaretlerinden kaçar.- Daha sonra
Invoke-Expressioncmdlet'i$commanddeğişkeninde saklanan komutu yürütmek için kullanılır. - Bu kodun çıktısı, E: sürücüsünde bulunan ve komut yürütüldüğünde çalışan işlemlerin listesini içeren
File1.txtadlı bir dosyadır.
[scriptblock]::Create() Yöntemini Kullanma
Bir dizeyi PowerShell'de komut olarak çalıştırmak için [scriptblock]::Create() yöntemini kullanın.
Create() Yöntemini kullanın:
$commandString = "Get-ChildItem C:\TEST1"
$commandBlock = [scriptblock]::Create($commandString)
& $commandBlockÇıkış:
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2/21/2023 11:26 PM FolderA
d----- 2/21/2023 11:27 PM FolderB
-a---- 2/21/2023 9:32 PM 0 File1.txt
-a---- 2/21/2023 9:32 PM 0 File2.txtYukarıdaki kod şu şekilde çalışmaktadır:
- Kod bloğunun ilk satırı
$commandStringadında bir değişken oluşturur ve değerini"Get-ChildItem C:\TEST1"olarak ayarlar. - Bundan sonra ikinci satır,
ScriptBlocksınıfının statikCreate()yöntemini kullanarak$commandBlockadlı bir komut dosyası bloğu nesnesi oluşturur.Createyöntemi, girdi olarak bir dize alır ve PowerShell komutu olarak yürütülebilecek bir komut dosyası bloğu nesnesini döndürür. Bu durumda,Create()'a iletilen dize,$commandStringdeğişkeninin değeridir, yani"Get-ChildItem C:\TEST1". kodu>. Bu,C:\TEST1bağımsız değişkeniyleGet-ChildItemkomutunu temsil eden bir komut dosyası bloğu oluşturur. - Son olarak, kodun son satırında,
$commandBlockdeğişkeninde saklanan komut dosyası bloğunu yürütmek için çağrı operatörü (&) kullanıldı. Çağrı operatörü PowerShell'e betik bloğunu bir komut olarak ele almasını ve çalıştırmasını söyler. Komut dosyası bloğu,C:\TEST1argümanıylaGet-ChildItemkomutunu çalıştırır ve bu,C'de bulunan dosya ve klasörler hakkında bilgi alır. :\TEST1dizini.
Yukarıdaki çözümler göz önüne alındığında, dizeyi PowerShell'de komut olarak çalıştırmak, karmaşık görevleri otomatikleştirmenize ve gelişmiş sistem yönetimi görevlerini gerçekleştirmenize yardımcı olabilecek güçlü bir araçtır. Ayrıca, en iyi uygulamaları takip ederek bu özelliği Windows sistemlerinizi yönetmek için güvenli ve verimli bir şekilde kullanabilirsiniz.
Bunların hepsi PowerShell'de string'in komut olarak nasıl çalıştırılacağıyla ilgili.
