使用调用命令 Powershell 在函数内调用函数
-
24-12-2019 - |
题
我希望在调用命令中调用函数内的函数。看来我做得不正确。我收到“get-group_users”无法识别错误。一切都在一个 ps1 脚本中。
截断的脚本:
function get-session {
$session = New-PSSession -ComputerName $ip -Credential $cred -Auth CredSSP
$ComputerName = $cred.Replace('\Admin',"")
$csv = "C:\Scripts\Serverlists\" + $ComputerName + ".txt"
$subcomps = import-csv $csv | foreach-object {$_.Name}
foreach ($ComputerName in $subcomps)
{
$ComputerName
$xmlWriter.WriteStartElement("Computer",$ComputerName)
Invoke-Command -Session $session -ScriptBlock { (get-groups_users -ComputerName $ComputerName) } -ArgumentList $ComputerName
$xmlWriter.WriteEndElement()
}
Remove-PSSession -ComputerName $ip
}
$ip = '172.16.24.11'
$ComputerName = "COMP1"
$user = '\Admin'
$cred = $ComputerName + $user
(get-groups_users -ComputerName $ComputerName)
(get-session -Credential $cred -ComputerName $ip)
所以,我省略了 get-groups_users
功能。如果有人认为这有助于解释一切,我可以发布它。这是一篇很长的文章。我也遗漏了 $xmlwriter
定义。
get-groups_users
当它在 COMP1 上运行时有效,但是一旦我输入 PSSession
并尝试在调用命令中使用它来处理它无法识别的子组件。
我忘记了什么?
解决方案
您必须包括 get-groups_users
里面的函数定义 -ScriptBlock
调用时的参数 Invoke-Command
. 。如果不这样做,远程会话将不知道 get-groups_users
功能。
解决方法如下:
$ScriptBlock = {
function get-groups_users {
############ Put your function's code here ############
}
(get-groups_users -ComputerName $ComputerName)
};
Invoke-Command -Session $session -ScriptBlock $ScriptBlock -ArgumentList $ComputerName
不隶属于 StackOverflow