جلسات PowerShell البعيد وسؤال النطاق: يبدو أن الأوامر تعمل محليًا

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

  •  25-09-2019
  •  | 
  •  

سؤال

إليك نموذج نصي يحاول إنشاء جلسة عن بُعد على خادم ، ثم استخدم WMI للحصول على قائمة بتجمعات تطبيقات IIS الخاصة بالخادم ، وسرد أسمائها:

    function Test-Remoting
    {
        [CmdletBinding()]
        param
        (    
        )
        begin
        {
            Enter-PSSession TestServer
            $appPools = Get-WmiObject -namespace "root\MicrosoftIISv2" -class "IIsApplicationPool" -Authentication 6
            $appPools | ForEach-Object {
                $appPool = $_;
                $appPool.Name
            }
            Exit-PSSession
        }    
    }

هذه الوظيفة موجودة في ملف بعنوان "test-remoting.ps1." أفتح PowerShell ، قرص مضغوط في الدليل الذي يحتوي على هذا الملف ، ونقل الملف في الملف ، واتصل بالوظيفة:

PS C:\Users\moskie> . .\Test-Remoting.ps1
PS C:\Users\moskie> Test-Remoting

لكن نتيجة هذا البرنامج النصي هي قائمة بتجمعات التطبيقات على بلدي محلي آلة ، و ليس TestServer.

بدلاً من ذلك ، إذا قمت بتشغيل الأسطر التالية (مماثلة لتلك الموجودة في الوظيفة) يدويًا في موجه PowerShell ، i فعل احصل على قائمة تجمعات التطبيق على الخادم البعيد:

PS C:\Users\moskie> Enter-PSSession TestServer
[TestServer]: PS C:\> $appPools = Get-WmiObject -namespace "root\MicrosoftIISv2" -class "IIsApplicationPool" -Authentication 6
[TestServer]: PS C:\> $appPools | ForEach-Object { $appPool = $_; $appPools.Name }
<a list of the names of the application pools on TestServer>
[TestServer]: PS C:\>

أعتقد أن هناك مفهومًا أنا غافلاً ، فيما يتعلق ببريدشيل عن بعد ونطاقه. هل يمكن لأي شخص أن يساعد في شرح هذا السلوك؟

هل كانت مفيدة؟

المحلول

أعتقد أن Enter/Exit-Pssession يعني الاستخدام التفاعلي. من مساعدة Enter-Pssession:

SYNOPSIS
    Starts an interactive session with a remote computer.

في البرنامج النصي ، استخدم pssession الجديد واستدعاء مثل ذلك:

$session = New-PSSession server01
Invoke-Command -Session $session {hostname}
Remove-PSSession -Session $session

تحديث: لتنفيذ برنامج نصي كامل استخدم المعلمة FilePath عن بعد على invoke-command:

icm server01 -FilePath C:\users\keith\myscript.ps1 -arg 1,2

سيؤدي ذلك إلى نسخ البرنامج النصي إلى جهاز الكمبيوتر عن بُعد Server01 وتنفيذه هناك باستخدام المعلمات المقدمة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top