נניח שלמדת לבצע פקודות באופן מקומי; זה כבר אבן דרך בדרך לשליטה בביצוע מרוחק. PowerShell Remoting מאפשר למנהלים להריץ פקודות וסקריפטים על מערכות מרוחקות.
המדריך הזה מדגים כיצד להקים ולהשתמש ב-PowerShell Remoting בסביבת Active Directory (AD). דמיין יצירת קבצים, הרצת סקריפטים או בדיקת תצורות מרחוק מבלי לעזוב את השולחן שלך.
הקם והשתמש ב-PowerShell Remoting כדי להריץ בביטחון סקריפטים על מערכות מרוחקות!
הקמת PowerShell Remoting עבור משתמש סטנדרטי
לפני שאתה מנצל את כל היתרונות של PowerShell Remoting, עליך לוודא שההיתרים הנדרשים קיימים. הרצת פקודות או סקריפטים מרחוק תלויה בתצורה נכונה, במיוחד בסביבות Active Directory שבהן אבטחה היא עדיפות.
התחל בניסיון להתחבר לשרת מרוחק (SRV2
) באמצעות Invoke-Command
. הפקודה הבאה מריצה סקריפטבלוק על המחשב המרוחק:
Invoke-Command -ComputerName SRV2 -ScriptBlock {Write-Host "Hi, I'm running code on the $(hostname) remote computer!"}
אם האימות נכשל, זה בדרך כלל אומר שהמשתמש חסר את ההיתרים הנדרשים.
ברירת המחדל, משתמשים שאינם מנהלים חייבים להיות חברים בקבוצת Remote Management Users המקומית של המחשב המרוחק.
בדוק את חברות הקבוצה:
Get-LocalGroupMember -Group 'Remote Management Users'
אם המשתמש אינו מופיע ברשימה, הוסף אותו:
Add-LocalGroupMember -Group 'Remote Management Users' -Member user Get-LocalGroupMember -Group 'Remote Management Users'
עכשיו, נסה שוב את הפקודה Invoke-Command
כדי לאשר את החיבור.
Invoke-Command -ComputerName SRV2 -ScriptBlock {Write-Host "Hi, I'm running code on the $(hostname) remote computer!"}
הרצת סקריפט בסיסי מרחוק
לאחר שהגדרת את PowerShell Remoting, תוכל להריץ פקודות על המחשב המרוחק. יכולת זו פותחת את הפוטנציאל לאוטומציה של משימות, איסוף נתונים, ופתרון בעיות מרחוק.
כדי לראות כיצד עובד PowerShell Remoting, צור קובץ טקסט במחשב המרוחק, ולאחר מכן ודא שהפעולה הצליחה.
הגדר והרץ את ה-scriptblock:
$scriptblock = { Set-Content -Path 'somefile.txt' -Value '' } Invoke-Command -Scriptblock $scriptblock -ComputerName SRV2
ודא שהקובץ נוצר עם הפקודה הבאה:
פקודה זו מתחברת למחשב המרוחק SRV2
, שואבת מידע על הקובץ somefile.txt
, ומפיקה רק את שמו וזמן יצירתו.
icm -ComputerName SRV2 -ScriptBlock {Get-Item somefile.txt} | Select-Object Name, CreationTime
הרצת סקריפטים מקומיים על מחשבים מרוחקים
אולי פקודה אחת לא מספיקה, ואתה עשוי להזדקק להרצת סקריפט שלם המאוחסן במחשב שלך. אם כן, PowerShell Remoting מאפשר לך במהירות לשלוח סקריפט מקומי למחשב מרוחק ולהריץ אותו כאילו היית שם פיזית.
כדי להדגים הרצת סקריפטים על מחשב מרוחק, צור סקריפט קצר מקומית והרץ אותו על מכונה מרוחקת כדי לאוטומט פעולות או משימות ניקוי.
צור סקריפט מקומית עם הפקודה הזו שבה:
$scriptContents
מאחסן את הסקריפט במחרוזת מרובת שורות באמצעות here-string (@' ... '@
), שזה שימושי לשמירה על הסקריפט קריא ומאורגן.Set-Content
כותב את תוכן$scriptContents
לקובץ בשם*RunThisRemotely.ps1*
בספרייה הנוכחית.
$scriptContents = @' Write-Host "Deleting the file just created..." Remove-Item -Path somefile.txt '@ Set-Content -Path 'RunThisRemotely.ps1' -Value $scriptContents
אשר את תוכן הסקריפט:
Get-Content RunThisRemotely.ps1
הרץ את הסקריפט מרחוק:
Invoke-Command -ComputerName SRV2 -FilePath RunThisRemotely.ps1
עכשיו, ודא שהקובץ הבדיקה נמחק:
icm -ComputerName SRV2 -ScriptBlock {Test-Path somefile.txt}
אימות מפתחות רישום מקומיים עם בלוק סקריפט
תמיכה בהעברת משתנים בין מושבים מקומיים ומרוחקים ב-PowerShell Remoting מאפשרת סקריפטים גמישים וניתנים לשימוש חוזר. אך כדי להתחיל, נתמקד בבדיקת מפתחות רישום באופן מקומי.
אחסן מספר מסלולי רישום שניתן לבדוק מאוחר יותר כדי לראות אם הם קיימים במערכת:
# Define an array of registry paths to check $registryKeyPaths = @( 'HKLM:\SOFTWARE\Microsoft\AppV\', 'HKLM:\SOFTWARE\Microsoft\AccountsControl\' )
הוסף זאת לסקריפט כדי להגדיר בלוק סקריפט ****($localScriptBlock
) שמבוצע באופן מקומי במחשב. בלוק הסקריפט בודק האם מסלולי רישום ספציפיים קיימים במכונה המקומית ומספק משוב עבור כל מסלול.
# Define the script block that will run locally on the computer $localScriptBlock = { ## Iterate through each registry path in the $registryKeyPaths array foreach ($path in $registryKeyPaths) { # Check if the current registry path exists on the local machine if (Test-Path -Path $path) { # If the path exists, output a message confirming its existence Write-Host -Object "The registry path [$path] exists on the computer $(hostname)." } else { # If the path does not exist, output a message stating its absence Write-Host -Object "The registry path [$path] does not exist on the computer $(hostname)." } } }
בצע את בלוק הסקריפט וראה מה קורה.
Invoke-Command -ScriptBlock $localScriptBlock
העברת משתנים מקומיים למושבים מרוחקים
בין אם אתה עובד עם מערכים, מחרוזות או אובייקטים, תוכל להעביר נתונים לפקודות מרוחקות בשתי דרכים:
$using
– משלב משתנים מקומיים ישירות בבלוק הסקריפט.ArgumentList
– מעביר במפורש משתנים לבלוק לשימוש.
קרא עוד כדי לבדוק את שתי השיטות ($using
או ArgumentList
) להשגת מטרה זו.
שימוש במילת המפתח $using
(גישה מועדפת)
לאחר שאישרת שהמפתחות ברישום קיימים, הצעד הבא הוא לקרוא את המערך הזה במחשב המקומי ולהשתמש בו בסקריפט במחשב מרוחק. אחת הדרכים להשיג את המטרה הזו היא באמצעות המילה המפתח $using
כדי להתייחס למשתנים מקומיים בסשנים מרוחקים.
צור סקריפט שירוץ על המחשב המרוחק ויבדוק את מסלולי הרישום المحدדים. סקריפט זה מספק משוב לגבי האם כל מסלול קיים או לא.
בשיטה זו, אתה פשוט מוסיף את הקידומת $using
למשתנה מקומי. פעולה זו אומרת ל-PowerShell להתייחס למשתנה המקומי registryKeyPaths
לפני ביצוע הקוד על המחשב המרוחק.
$remoteScriptBlock = { ## Check to see if the registry keys exist on the computer foreach ($path in $using:registryKeyPaths) { if (Test-Path -Path $path) { Write-Host -Object "The registry path [$path] exists on the computer $(hostname)." } else { Write-Host -Object "The registry path [$path] does not exist on the computer $(hostname)." } } }
לאחר מכן תוכל להפעיל את הפקודה המרוחקת כדי להריץ את הקוד על המחשב המרוחק:
Invoke-Command -ScriptBlock $remoteScriptBlock -ComputerName SRV2
נראה שהמפתחות ברישום קיימים גם שם.
שימוש בפרמטר ArgumentList
מלבד המילה המפתח $user
, אפשרות נוספת היא הפרמטר ArgumentList
לשליחת משתנים לסשן המרוחק.
צור סקריפט (דומה לזה עם המילה המפתח $using
) שמשתמש במערך $args
כדי לגשת לערכים שנשלחו באמצעות הפרמטר ArgumentList
.
בשיטה זו, אתה מציין אחד או יותר משתנים שישלחו לסשן המרוחק דרך הפרמטר ArgumentList
. בתוך בלוק הסקריפט, החלף את המשתנה המקומי ב-$args
, ש-PowerShell ימלא אוטומטית בערכים שנשלחו דרך ArgumentList
.
$remoteScriptBlock = { ## Check to see if the registry keys exist on the computer foreach ($path in $args) { if (Test-Path -Path $path) { Write-Host -Object "The registry path [$path] exists on the computer $(hostname)." } else { Write-Host -Object "The registry path [$path] does not exist on the computer $(hostname)." } } }
עכשיו, הרץ את הסקריפט עם הפקודה הבאה:
Invoke-Command -ScriptBlock $remoteScriptBlock -ComputerName SRV2 -ArgumentList $registryKeyPaths
שני השיטות יפיקו את אותו פלט, מאשרות שהמפתחות ברגיסטר קיימים במחשב המרוחק.
על ידי ביצוע הצעדים הללו, אתה יכול להקים ולהשתמש ב-PowerShell Remoting כדי להריץ פקודות וסקריפטים על מערכות מרוחקות.
סיכום
במדריך זה, למדת כיצד להקים את PowerShell Remoting בסביבת Active Directory, להריץ פקודות וסקריפטים על מערכות מרוחקות, ולהעביר משתנים בצורה יעילה. מיומנויות בסיסיות אלו חיוניות לאוטומציה של משימות ניהוליות ולניהול מערכות ביעילות.
עכשיו כשיש לך את היסודות מכוסים, שקול לחקור נושאים מתקדמים יותר. בדוק סשנים מתמשכים של PowerShell, טיפול בשגיאות מרוחקות, או יצירת סקריפטים שניתן לעשות בהם שימוש חוזר כדי להתמודד עם פעולות המוניים.
האפשרויות עם PowerShell Remoting הן אינסופיות—אז התחל להתנסות והפוך את זרימות העבודה שלך ליעילות יותר!
Source:
https://adamtheautomator.com/powershell-remoting-guide/