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 $command

Bu 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   chrome

Invoke-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 listesini CPU ö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:

  • $command dize değişkeni yürütülebilir bir dosyayla (bu örnekte notepad.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 $command

File1.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:

  • $filename dize değişkeni oluşturulur ve File1.txt olarak ayarlanır.
  • Daha sonra $command değ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-File cmdlet'i, Get-Process cmdlet'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-Expression cmdlet'i $command değ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.txt adlı 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.txt

Yukarıdaki kod şu şekilde çalışmaktadır:

  • Kod bloğunun ilk satırı $commandString adında bir değişken oluşturur ve değerini "Get-ChildItem C:\TEST1" olarak ayarlar.
  • Bundan sonra ikinci satır, ScriptBlock sınıfının statik Create() yöntemini kullanarak $commandBlock adlı bir komut dosyası bloğu nesnesi oluşturur. Create yö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, $commandString değişkeninin değeridir, yani "Get-ChildItem C:\TEST1". kodu>. Bu, C:\TEST1 bağımsız değişkeniyle Get-ChildItem komutunu temsil eden bir komut dosyası bloğu oluşturur.
  • Son olarak, kodun son satırında, $commandBlock değ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:\TEST1 argümanıyla Get-ChildItem komutunu çalıştırır ve bu, C'de bulunan dosya ve klasörler hakkında bilgi alır. :\TEST1 dizini.

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.

İlgili makaleler