استدعاء دالة داخل دالة باستخدام أمر الاستدعاء Powershell

StackOverflow https://stackoverflow.com//questions/22083674

سؤال

آمل أن أقوم باستدعاء وظيفة داخل وظيفة في أمر الاستدعاء.يبدو أنني لا أفعل هذا بشكل صحيح.أحصل على خطأ "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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top