【发布时间】:2020-05-01 14:14:58
【问题描述】:
我有一个脚本,它启动一个包含 c# 代码的脚本块的 powershell 作业。
现在我有一个 sleep 命令可以让代码正确定位自己,但更简洁的方法(如果可能的话)是让 psjob c# 代码设置一个标志并允许我的其余代码以尽快,而不是等待 5 秒钟的睡眠。这可能吗?
$containerScript = {a mix of c# and powershell}
Start-Job -ScriptBlock $containerScript ;
sleep 5; # wait here for c# code to set up
Connect-MsolService;
因此,如果我在 c# psjob 脚本中设置了一个变量,比如bool started = true;我怎么能通过循环而不是在上面显示的 powershell 代码中使用 sleep 5 来读取它,这在 psjob 运行空间和 c# 代码之外?
【问题讨论】:
-
我想出了这么多@mklement0 $result = Receive-Job -id $returnValue.Id -InformationVariable infovariable;我可以从该输出中看到我在 psjobs 脚本中使用“Write-Host”的任何内容,但我没有看到 c# Console.Write("adfadf") 类型的输出?
-
是的,我把它作为一个循环。我需要知道如何将值从 c# 代码传递到 psjobs 包装器,我才能让它工作?
-
我不能返回一个值,因为它会停止 c# 代码的执行,这就是为什么我想做一个两个代码集都可读的标志。有没有办法在不使用返回函数的情况下写入管道?像 Pipeline.Write("asdfaf") 之类的东西?
-
在c#部分可能是这样的吗?
Runspace rs = RunspaceFactory.CreateRunspace();rs.Open();Pipeline pipe = rs.CreatePipeline();pipe.Commands.AddScript("Write-Host loopFirstTime");pipe.Invoke();rs.Close();
标签: c# powershell environment-variables global-variables