أحداث من سجل النظام على الكمبيوتر المحلي
الحصول على أحداث من سجل النظام على الكمبيوتر المحلي
$j = Start-Job -ScriptBlock {Get-EventLog -Log system} -Credential domain01\user01
$j | Format-List -Property *
$j.JobStateInfo.state
$results = Receive-Job -Job $j
$results
تشغيل البرنامج النصي كمهمة خلفية
Start-Job -FilePath "c:\scripts\sample.ps1"
الحصول على عملية بالاسم باستخدام مهمة الخلفية
Start-Job -Name "WinRm" -ScriptBlock {Get-Process winrm}
جمع وحفظ البيانات باستخدام وظيفة الخلفية
Start-Job -Name GetMappingFiles -InitializationScript {Import-Module MapFunctions} -ScriptBlock {Get-Map -Name * | Set-Content D:\Maps.tif} -RunAs32
بدأت جميع وظائف الخلفية في الدورة الحالية
Get-Job
إيقاف وظيفة باستخدام معرف مثيل
$j = Get-Job -Name Job1
$ID = $j.InstanceID
$ID
احصل على وظائف تتضمن أمر محدد
Get-Job -Command "*get-process*"
الحصول على الوظائف التي لم يتم تعيين اسم
Get-Job -Name Job*
استخدام كائن مهمة لتمثيل المهمة في أمر
Start-Job -ScriptBlock {Get-Process} -Name MyJob
$j = Get-Job -Name MyJob
$j
للحصول على نتائج المهمة.
Receive-Job -Job $j
الحصول على جميع الوظائف بما في ذلك الوظائف التي كتبها طريقة مختلفة
Start-Job -ScriptBlock {Get-EventLog System}
Invoke-Command -ComputerName S1 -ScriptBlock {Get-EventLog System} -AsJob
Invoke-Command -ComputerName S2 -ScriptBlock {Start-Job -ScriptBlock {Get-EventLog System}}
يستخدم الأمر الرابع ** جيت-جوب ** للحصول على الوظائف المخزنة على الكمبيوتر المحلي. ** الخاصية بسجوبتيبنام ** الوظائف، التي أدخلت في ويندوز بويرشيل 3.0، يدل على أن المهمة المحلية بدأت باستخدام ** بدء العمل ** كمدليت هو مهمة الخلفية وبدأت المهمة في جلسة عمل عن بعد باستخدام ** استدعاء القيادة ** كمدليت هو وظيفة عن بعد.
Get-Job
Invoke-Command -ComputerName S2 -ScriptBlock {Start-Job -ScriptBlock {Get-EventLog System}}
التحقيق في وظيفة فاشلة
Start-Job -ScriptBlock {Get-Process}
(Get-Job).JobStateInfo | Format-List -Property *
عرض جميع الخصائص في كائن المهمة يظهر أن المهمة تحتوي على وظيفة طفل اسمها Job2.
Get-Job | Format-List -Property *
(Get-Job -Name job2).JobStateInfo.Reason
لأمر الأول يحصل على وظائف في الدورة الحالية. الإخراج يتضمن وظيفة خلفية، وظيفة عن بعد والعديد من الحالات من وظيفة مجدولة. يبدو أن الوظيفة البعيدة، Job4، قد فشلت
Get-Job
الحصول على نتائج لوظيفة معينة
$job = Start-Job -ScriptBlock {Get-Process}
Receive-Job -Job $job
$job = Start-Job -ScriptBlock {Get-Process}
$job | Receive-Job
يحتوي كائن المهمة على ثلاث وظائف فرعية، واحدة لكل وظيفة على كل كمبيوتر بعيد.
$j = Invoke-Command -ComputerName Server01, Server02, Server03 -ScriptBlock {Get-Service} -AsJob
$j.ChildJobs
هذه الأوامر الحصول على نتائج واحدة من عدة وظائف خلفية تعمل على أجهزة الكمبيوتر البعيدة.
مثال 4: الحصول على نتائج وظائف الخلفية على أجهزة الكمبيوتر البعيدة متعددة
$s = new-pssession -computername Server01, Server02, Server03
$j = invoke-command -session $s -scriptblock {start-job -scriptblock {get-eventlog -logname system}}
$results = Invoke-Command -Session $s -ScriptBlock {Receive-Job -Job $Using:j}
إيقاف وظيفة على كمبيوتر بعيد باستخدام إنفوك-كوماند
$s = New-PSSession -ComputerName Server01 -Credential Domain01\Admin02
PS C:\> $j = Invoke-Command -Session $s -ScriptBlock {Start-Job -ScriptBlock {Get-EventLog System}}
PS C:\> Invoke-Command -Session $s -ScriptBlock { Stop-job -Job $Using:j }
إيقاف وظيفة الخلفية
Stop-Job -Name "Job1"
Stop-Job -Id 1, 3, 4
إيقاف جميع وظائف الخلفية
Get-Job | Stop-Job
Stop-Job -State Blocked
يقاف مهمة على كمبيوتر بعيد
$j = Invoke-Command -ComputerName Server01 -ScriptBlock {Get-EventLog System} -AsJob
$j | Stop-Job -PassThru
انتظر بدء العمل على أجهزة الكمبيوتر عن بعد باستخدام
$s = New-PSSession Server01, Server02, Server03
Invoke-Command -Session $s -ScriptBlock {Start-Job -Name Date1 -ScriptBlock {Get-Date}}
$done = Invoke-Command -Session $s -Command {Wait-Job -Name Date1}
$done.Count
تحديد متى تنتهي مهمة الخلفية الأولى
$s = New-PSSession (Get-Content Machines.txt)
$c = 'Get-EventLog -LogName System | where {$_.EntryType -eq "error" --and $_.Source -eq "LSASRV"} | Out-File Errors.txt'
Invoke-Command -Session $s -ScriptBlock {Start-Job -ScriptBlock {$Using:c}
Invoke-Command -Session $s -ScriptBlock {Wait-Job -Any}
تعيين وقت الانتظار للوظائف على أجهزة الكمبيوتر البعيدة
$s = New-PSSession Server01, Server02, Server03
$jobs = Invoke-Command -Session $s -ScriptBlock {Start-Job -ScriptBlock {Get-Date}}
$done = Invoke-Command -Session $s -ScriptBlock {Wait-Job -Timeout 30}
انتظر حتى تنتهي واحدة من عدة وظائف
Wait-Job -id 1,2,5 -Any
انتظر لفترة، ثم السماح للعمل على الاستمرار في الخلفية
Wait-Job -Name "DailyLog" -Timeout 120
لبدء جلسة تفاعلية مع Server01، كمبيوتر بعيد. عند بدء الجلسة، تتغير موجه الأوامر لتضمين اسم الكمبيوتر.
Enter-PSSession -Computer Server01
الإخراج إلى الملف Process.txt. يتم إرسال الأمر إلى الكمبيوتر البعيد، ويتم حفظ الملف على الكمبيوتر البعيد.
Get-Process Powershell > C:\ps-test\Process.txt
يوضح هذا الأمر كيفية العمل في جلسة تفاعلية مع كمبيوتر بعيد.
$s = New-PSSession -ComputerName Server01
Enter-PSSession -Session $s
بدء جلسة تفاعلية وتحديد معاملات بورت و كريدنتيال
Enter-PSSession -ComputerName Server01 -Port 90 -Credential Domain01\User01
يبدأ هذا الأمر جلسة تفاعلية مع الكمبيوتر Server01. يستخدم المعلمة المنفذ لتحديد المنفذ ومعامل الاعتماد لتحديد حساب مستخدم لديه إذن للاتصال بالكمبيوتر البعيد.
Enter-PSSession -ComputerName Server01
Exit-PSSession
بدء جلسة تفاعلية باستخدام سش
Enter-PSSession -HostName LinuxServer01 -UserName UserA
دء جلسة تفاعلية باستخدام سش وتحديد مفتاح المصادقة بورت والمستخدم
Enter-PSSession -HostName LinuxServer02 -UserName UserA -Port 22 -KeyFilePath c:\<path>\userAKey_rsa
استخدم الكلمة الرئيسية للخروج لإيقاف الجلسة
Enter-PSSession -computername Server01
exit
إنشاء خيار جلسة عمل افتراضية
New-PSSessionOption
تكوين جلسة عمل باستخدام كائن خيار جلسة عمل
$pso = New-PSSessionOption -Culture "fr-fr" -MaximumReceivedObjectSize 10MB
New-PSSession -ComputerName Server01 -SessionOption $pso
بدء جلسة تفاعلية
Enter-PSSession -ComputerName Server01 -SessionOption (New-PSSessionOption -NoEncryption -NoCompression)
تعديل كائن خيار الجلسة
$a = New-PSSessionOption
$a = New-PSSessionOption
$a.UICulture = (Get-UICulture)
$a.OpenTimeout = (New-Timespan -Minutes 4)
$a.MaximumConnectionRedirectionCount = 1
$a
$PSSessionOption = New-PSSessionOption -OpenTimeOut 120000
الوفاء بمتطلبات تكوين جلسة عمل عن بعد
$skipCN = New-PSSessionOption -SkipCNCheck
New-PSSession -ComputerName 171.09.21.207 -UseSSL -Credential Domain01\User01 -SessionOption $SkipCN
لأنه يتم تعريف الكمبيوتر بواسطة عنوان إب الخاص به، لا تتطابق قيمة المعلمة كومبوترنام مع أي من الأسماء الشائعة في الشهادة المستخدمة ل طبقة المقابس الآمنة (سل). ونتيجة لذلك، مطلوب الخيار سكيبنشيك.
مثال 7: جعل الوسيطات متاحة لجلسة بعيدة
$team = @{Team="IT"; Use="Testing"}
$TeamOption = New-PSSessionOption -ApplicationArguments $team
$s = New-PSSession -ComputerName Server01 -SessionOption $TeamOption
Invoke-Command -Session $s {$PSSenderInfo.SpplicationArguments}
Invoke-Command -Session $s {if ($PSSenderInfo.ApplicationArguments.Use -ne "Testing") {.\logFiles.ps1} else {"Just testing."}}
الحصول على أحداث من سجل النظام على الكمبيوتر المحلي
$j = Start-Job -ScriptBlock {Get-EventLog -Log system} -Credential domain01\user01
$j | Format-List -Property *
$j.JobStateInfo.state
$results = Receive-Job -Job $j
$results
تشغيل البرنامج النصي كمهمة خلفية
Start-Job -FilePath "c:\scripts\sample.ps1"
الحصول على عملية بالاسم باستخدام مهمة الخلفية
Start-Job -Name "WinRm" -ScriptBlock {Get-Process winrm}
جمع وحفظ البيانات باستخدام وظيفة الخلفية
Start-Job -Name GetMappingFiles -InitializationScript {Import-Module MapFunctions} -ScriptBlock {Get-Map -Name * | Set-Content D:\Maps.tif} -RunAs32
بدأت جميع وظائف الخلفية في الدورة الحالية
Get-Job
إيقاف وظيفة باستخدام معرف مثيل
$j = Get-Job -Name Job1
$ID = $j.InstanceID
$ID
احصل على وظائف تتضمن أمر محدد
Get-Job -Command "*get-process*"
الحصول على الوظائف التي لم يتم تعيين اسم
Get-Job -Name Job*
استخدام كائن مهمة لتمثيل المهمة في أمر
Start-Job -ScriptBlock {Get-Process} -Name MyJob
$j = Get-Job -Name MyJob
$j
للحصول على نتائج المهمة.
Receive-Job -Job $j
الحصول على جميع الوظائف بما في ذلك الوظائف التي كتبها طريقة مختلفة
Start-Job -ScriptBlock {Get-EventLog System}
Invoke-Command -ComputerName S1 -ScriptBlock {Get-EventLog System} -AsJob
Invoke-Command -ComputerName S2 -ScriptBlock {Start-Job -ScriptBlock {Get-EventLog System}}
يستخدم الأمر الرابع ** جيت-جوب ** للحصول على الوظائف المخزنة على الكمبيوتر المحلي. ** الخاصية بسجوبتيبنام ** الوظائف، التي أدخلت في ويندوز بويرشيل 3.0، يدل على أن المهمة المحلية بدأت باستخدام ** بدء العمل ** كمدليت هو مهمة الخلفية وبدأت المهمة في جلسة عمل عن بعد باستخدام ** استدعاء القيادة ** كمدليت هو وظيفة عن بعد.
Get-Job
Invoke-Command -ComputerName S2 -ScriptBlock {Start-Job -ScriptBlock {Get-EventLog System}}
التحقيق في وظيفة فاشلة
Start-Job -ScriptBlock {Get-Process}
(Get-Job).JobStateInfo | Format-List -Property *
عرض جميع الخصائص في كائن المهمة يظهر أن المهمة تحتوي على وظيفة طفل اسمها Job2.
Get-Job | Format-List -Property *
(Get-Job -Name job2).JobStateInfo.Reason
لأمر الأول يحصل على وظائف في الدورة الحالية. الإخراج يتضمن وظيفة خلفية، وظيفة عن بعد والعديد من الحالات من وظيفة مجدولة. يبدو أن الوظيفة البعيدة، Job4، قد فشلت
Get-Job
الحصول على نتائج لوظيفة معينة
$job = Start-Job -ScriptBlock {Get-Process}
Receive-Job -Job $job
$job = Start-Job -ScriptBlock {Get-Process}
$job | Receive-Job
يحتوي كائن المهمة على ثلاث وظائف فرعية، واحدة لكل وظيفة على كل كمبيوتر بعيد.
$j = Invoke-Command -ComputerName Server01, Server02, Server03 -ScriptBlock {Get-Service} -AsJob
$j.ChildJobs
هذه الأوامر الحصول على نتائج واحدة من عدة وظائف خلفية تعمل على أجهزة الكمبيوتر البعيدة.
مثال 4: الحصول على نتائج وظائف الخلفية على أجهزة الكمبيوتر البعيدة متعددة
$s = new-pssession -computername Server01, Server02, Server03
$j = invoke-command -session $s -scriptblock {start-job -scriptblock {get-eventlog -logname system}}
$results = Invoke-Command -Session $s -ScriptBlock {Receive-Job -Job $Using:j}
إيقاف وظيفة على كمبيوتر بعيد باستخدام إنفوك-كوماند
$s = New-PSSession -ComputerName Server01 -Credential Domain01\Admin02
PS C:\> $j = Invoke-Command -Session $s -ScriptBlock {Start-Job -ScriptBlock {Get-EventLog System}}
PS C:\> Invoke-Command -Session $s -ScriptBlock { Stop-job -Job $Using:j }
إيقاف وظيفة الخلفية
Stop-Job -Name "Job1"
Stop-Job -Id 1, 3, 4
إيقاف جميع وظائف الخلفية
Get-Job | Stop-Job
Stop-Job -State Blocked
يقاف مهمة على كمبيوتر بعيد
$j = Invoke-Command -ComputerName Server01 -ScriptBlock {Get-EventLog System} -AsJob
$j | Stop-Job -PassThru
انتظر بدء العمل على أجهزة الكمبيوتر عن بعد باستخدام
$s = New-PSSession Server01, Server02, Server03
Invoke-Command -Session $s -ScriptBlock {Start-Job -Name Date1 -ScriptBlock {Get-Date}}
$done = Invoke-Command -Session $s -Command {Wait-Job -Name Date1}
$done.Count
تحديد متى تنتهي مهمة الخلفية الأولى
$s = New-PSSession (Get-Content Machines.txt)
$c = 'Get-EventLog -LogName System | where {$_.EntryType -eq "error" --and $_.Source -eq "LSASRV"} | Out-File Errors.txt'
Invoke-Command -Session $s -ScriptBlock {Start-Job -ScriptBlock {$Using:c}
Invoke-Command -Session $s -ScriptBlock {Wait-Job -Any}
تعيين وقت الانتظار للوظائف على أجهزة الكمبيوتر البعيدة
$s = New-PSSession Server01, Server02, Server03
$jobs = Invoke-Command -Session $s -ScriptBlock {Start-Job -ScriptBlock {Get-Date}}
$done = Invoke-Command -Session $s -ScriptBlock {Wait-Job -Timeout 30}
انتظر حتى تنتهي واحدة من عدة وظائف
Wait-Job -id 1,2,5 -Any
انتظر لفترة، ثم السماح للعمل على الاستمرار في الخلفية
Wait-Job -Name "DailyLog" -Timeout 120
لبدء جلسة تفاعلية مع Server01، كمبيوتر بعيد. عند بدء الجلسة، تتغير موجه الأوامر لتضمين اسم الكمبيوتر.
Enter-PSSession -Computer Server01
الإخراج إلى الملف Process.txt. يتم إرسال الأمر إلى الكمبيوتر البعيد، ويتم حفظ الملف على الكمبيوتر البعيد.
Get-Process Powershell > C:\ps-test\Process.txt
يوضح هذا الأمر كيفية العمل في جلسة تفاعلية مع كمبيوتر بعيد.
$s = New-PSSession -ComputerName Server01
Enter-PSSession -Session $s
بدء جلسة تفاعلية وتحديد معاملات بورت و كريدنتيال
Enter-PSSession -ComputerName Server01 -Port 90 -Credential Domain01\User01
يبدأ هذا الأمر جلسة تفاعلية مع الكمبيوتر Server01. يستخدم المعلمة المنفذ لتحديد المنفذ ومعامل الاعتماد لتحديد حساب مستخدم لديه إذن للاتصال بالكمبيوتر البعيد.
Enter-PSSession -ComputerName Server01
Exit-PSSession
بدء جلسة تفاعلية باستخدام سش
Enter-PSSession -HostName LinuxServer01 -UserName UserA
دء جلسة تفاعلية باستخدام سش وتحديد مفتاح المصادقة بورت والمستخدم
Enter-PSSession -HostName LinuxServer02 -UserName UserA -Port 22 -KeyFilePath c:\<path>\userAKey_rsa
استخدم الكلمة الرئيسية للخروج لإيقاف الجلسة
Enter-PSSession -computername Server01
exit
إنشاء خيار جلسة عمل افتراضية
New-PSSessionOption
تكوين جلسة عمل باستخدام كائن خيار جلسة عمل
$pso = New-PSSessionOption -Culture "fr-fr" -MaximumReceivedObjectSize 10MB
New-PSSession -ComputerName Server01 -SessionOption $pso
بدء جلسة تفاعلية
Enter-PSSession -ComputerName Server01 -SessionOption (New-PSSessionOption -NoEncryption -NoCompression)
تعديل كائن خيار الجلسة
$a = New-PSSessionOption
$a = New-PSSessionOption
$a.UICulture = (Get-UICulture)
$a.OpenTimeout = (New-Timespan -Minutes 4)
$a.MaximumConnectionRedirectionCount = 1
$a
$PSSessionOption = New-PSSessionOption -OpenTimeOut 120000
الوفاء بمتطلبات تكوين جلسة عمل عن بعد
$skipCN = New-PSSessionOption -SkipCNCheck
New-PSSession -ComputerName 171.09.21.207 -UseSSL -Credential Domain01\User01 -SessionOption $SkipCN
لأنه يتم تعريف الكمبيوتر بواسطة عنوان إب الخاص به، لا تتطابق قيمة المعلمة كومبوترنام مع أي من الأسماء الشائعة في الشهادة المستخدمة ل طبقة المقابس الآمنة (سل). ونتيجة لذلك، مطلوب الخيار سكيبنشيك.
مثال 7: جعل الوسيطات متاحة لجلسة بعيدة
$team = @{Team="IT"; Use="Testing"}
$TeamOption = New-PSSessionOption -ApplicationArguments $team
$s = New-PSSession -ComputerName Server01 -SessionOption $TeamOption
Invoke-Command -Session $s {$PSSenderInfo.SpplicationArguments}
Invoke-Command -Session $s {if ($PSSenderInfo.ApplicationArguments.Use -ne "Testing") {.\logFiles.ps1} else {"Just testing."}}
Post a Comment