如何在本地定义变量然后在远程机器中引用它们?

时间:2016-12-28 22:30:00

标签: powershell active-directory

假设我有3个功能; A,B和C.显然这是超级淡化,但逻辑是存在的。

A是收集名称的函数。

function A {
Set-Variable -Scope Script -Name "First" -Value (Read-Host "First name?")
Set-Variable -Scope Script -Name "Last" -Value (Read-Host "Last name?")
}

功能B将使用此名称创建具有msol会话的O365用户。没什么大不了的。

function B {
Connect-MsolService -Credential $creds 
"Add user foo"
$Name = "$Script:First $Script:Last"
"Success!"
}

虽然函数C使用A中的名称,但在PSSession中将其引用到远程AD服务器。这是我的知识完全崩溃的地方。我已经尝试了所有我在C中引用这些局部变量的知识。

function C {
New-ADUser
$Name = "$Script:First $Script:Last"
} 


New-PSSession -computername AD -credential $ADcreds

Invoke-Command -ComputerName AD -ScriptBlock ${function:C} -credential $ADcreds

Remove-PSSession $s0

但他们完全被抹去了。我试图先调用一个脚本块,然后使用旧数据再次定义它们,没有运气。我的$Script:Name在PSSession中总是出现空值。

我错过了一些巨大的东西吗?

1 个答案:

答案 0 :(得分:2)

using:变量前缀应该在这里工作。如果没有,则应在函数中定义Param部分,并使用-Argument参数将参数传递给Invoke-Command cmdlet。

$scriptBlockC = {
    New-ADUser
    $Name = "$using:First $using:Last"
}  

Invoke-Command -ComputerName AD -ScriptBlock $scriptBlockC -credential $ADcreds

请注意,我删除了function关键字,因为您只是定义了一个scriptblock。