- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试创建一个线程,该线程将使用共享变量(在主 session 和线程之间),并赋予线程使用主代码中外部函数的能力
我已经设法通过函数供线程使用,并且我已经设法通过了只读变量。我的问题是,如果我在线程内更改变量的值,然后尝试从主 session 读取它-我看不到值的更改,因此无法共享。
我怎么做?我的目标是最终拥有一个线程。
这是我的代码:
$x = [Hashtable]::Synchronized(@{})
$global:yo
Function ConvertTo-Hex {
#Write-Output "Function Ran"
write-host "hi"
$x.host.ui.WriteVerboseLine("===========")
write-host $yo
$global:yo = "test"
write-host $yo
}
#endregion
ls
# create an array and add it to session state
$arrayList = New-Object System.Collections.ArrayList
$arrayList.AddRange(('a','b','c','d','e'))
$x.host = $host
$sessionstate = [system.management.automation.runspaces.initialsessionstate]::CreateDefault()
$sessionstate.Variables.Add((New-Object System.Management.Automation.Runspaces.SessionStateVariableEntry('arrayList', $arrayList, $null)))
$sessionstate.Variables.Add((New-Object System.Management.Automation.Runspaces.SessionStateVariableEntry('x', $x, $null)))
$sessionstate.Variables.Add((New-Object System.Management.Automation.Runspaces.SessionStateVariableEntry('yo', $yo, $null)))
$sessionstate.Commands.Add((New-Object System.Management.Automation.Runspaces.SessionStateFunctionEntry -ArgumentList 'ConvertTo-Hex', (Get-Content Function:\ConvertTo-Hex -ErrorAction Stop)))
$runspacepool = [runspacefactory]::CreateRunspacePool(1, 2, $sessionstate, $Host)
$runspacepool.Open()
$ps1 = [powershell]::Create()
$ps1.RunspacePool = $runspacepool
$ps1.AddScript({
for ($i = 1; $i -le 15; $i++)
{
$letter = Get-Random -InputObject (97..122) | % {[char]$_} # a random lowercase letter
$null = $arrayList.Add($letter)
start-sleep -s 1
}
})
# on the first thread start a process that adds values to $arrayList every second
$handle1 = $ps1.BeginInvoke()
# now on the second thread, output the value of $arrayList every 1.5 seconds
$ps2 = [powershell]::Create()
$ps2.RunspacePool = $runspacepool
$ps2.AddScript({
Write-Host "ArrayList contents is "
foreach ($i in $arrayList)
{
Write-Host $i -NoNewline
Write-Host " " -NoNewline
}
Write-Host ""
$global:yo = "BAH"
ConvertTo-Hex
})
1..2 | % {
$handle2 = $ps2.BeginInvoke()
if ($handle2.AsyncWaitHandle.WaitOne())
{
$ps2.EndInvoke($handle2)
}
start-sleep -s 1.5
write-host "====================" + $yo
}
write-host $yo
最佳答案
同步哈希表将满足您的需求:
# Sync'd hash table is accessible between threads
$hash = [HashTable]::Synchronized(@{})
$hash.Parameter = "Value"
[PowerShell]$powershell = [PowerShell]::Create()
$powershell.AddScript({
Param
(
$hash
)
# do stuff
}).AddParameter("hash", $hash)
$powershell.BeginInvoke()
关于c# - RunSpacePool如何传递共享变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38943609/
为什么以下方法没有接受 RunspaceConnectionInfo 的重载(指定远程服务器信息)以及 InitialSessionState ? http://msdn.microsoft.com/
我需要使用 C# 中的 powershell 类运行 Exchange 在线 cmdlet。 要运行 exchange online cmdlet,我需要建立一个远程 powershell sessi
在 C# 中,InitialSessionState 类提供了一种导入特定模块并使用“ImportPSModule”方法使其对运行空间池中的所有运行空间可用的方法。 (但这会导入正在导入的模块中的所有
我正在尝试使用 Powershell RunspacePool 为远程服务器创建一些 C# 代码。将 maxRunspaces 设置为 1 时一切正常,但将其设置为 2 时会出现问题。 var con
我目前正在构建一个 Windows 服务,它将在收到一些请求时执行 PowerShell 命令。将会有很多请求进来,所以我采用了来自:Using Powershell RunspacePool mul
我是一名优秀的程序员,十分优秀!