استدعاء دالة داخل دالة باستخدام أمر الاستدعاء 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