在同一範圍內從 c# 調用多個 powershell 命令 (Invoke multiple powershell commands from c# on the same scope)


問題描述

在同一範圍內從 c# 調用多個 powershell 命令 (Invoke multiple powershell commands from c# on the same scope)

Basically what I want to do is:

Step 1) Invoke whatever.ps1 (or a scriptblock), the script is something like: $hello = "world"

Step 2) Invoke Get‑Variable ‑name hello

Step 3) Retrieve the output of Get‑Variable

I can't figure out how to do this cleanly, because every time I invoke a scriptblock a differente scope is created.

‑‑‑‑‑

參考解法

方法 1:

You have a couple of options.  Easiest is to change the script if you can to:

$global:hello = "world"

However using globals is generally a bad practice.  So another approach is to have your script output "Hello" and then capture the output the pipeline invocation.  Just change your initial script to this:

"world"

Then invoke it and grab the output of pipeline.Invoke() and grab the first object.  

You could also change the way you invoke the script.  Pass in a string to CreatePipeline that looks like this:

$hello = foo.ps1 

Then retreive the contents of variable $hello.

方法 2:

If you still want a global (the other answer covers this) you don't need to use Get‑Variable from your host application.

Create a Runspace and execute the script.

You can then access variables from the runspace:

value = myRunspace.SessionStateProxy.GetVariable("name");

(by Edgardo RossettoKeith HillRichard)

參考文件

  1. Invoke multiple powershell commands from c# on the same scope (CC BY‑SA 3.0/4.0)

#powershell






相關問題

玩弄 C# 加密 (Playing around with C# encryption)

查找具有特定 startname 的特定服務 (Finding specific services with specific startname)

試圖從事件日誌中獲取數據到電子郵件中的 html (Trying to get data from event logs into html in email)

如何通過powershell獲取請求的authtoken (How to obtain authtoken for request via powershell)

如何在錯誤時繼續使用 &$var 調用可執行文件 (How to continue on error a call to an executable using &$var)

在同一範圍內從 c# 調用多個 powershell 命令 (Invoke multiple powershell commands from c# on the same scope)

如何在 Powershell 二進制模塊(.Net Standard 和 Nuget)中處理公共和私有依賴項和打包 (How to handle public and private dependencies and packaging in Powershell binary module (.Net Standard & Nuget))

如何使用參數(描述空白)獲取廣告中的所有 OU - 沒有描述? (How to get all OU in Ad with parameter (description blank ) - without description?)

遠程服務器返回錯誤:(400) 錯誤請求。在 C:\Program Files\WindowsPowerShell\Modules\CosmosDB\3.1.0.293\CosmosDB.psm1 (The remote server returned an error: (400) Bad Request. At C:\Program Files\WindowsPowerShell\Modules\CosmosDB\3.1.0.293\CosmosDB.psm1)

Powershell 檢查文件類型 (Powershell check file type)

服務器待重啟 (Server Pending Reboot)

PowerShell 的 Invoke-WebRequest 在 Docker 容器中不起作用 (PowerShell's Invoke-WebRequest not working within a Docker Container)







留言討論