برای اجرای دستورات PowerShell در رایانه های راه دور باید ابتدا قابلیت PowerShell Remoting را فعال کرد. قابلیت PowerShell Remoting در سیستم عاملهای ویندوز به شما این امکان را می دهد که دستورات PowerShell را در یک سیستم دیگر از راه دور اجرا کنید یا دسترسی کامل نشست یک PowerShell در سیستم های ویندوزی راه دور را داشته باشید. این شبیه SSH برای دسترسی به ترمینال های راه دور در سیستم عامل های دیگر است.
قابلیت PowerShell Remoting در سیستم عامل ویندوز به صورت پیش فرض غیر فعال است، بنابراین قبل از استفاده از PowerShell Remoting باید آن را فعال کنید. اگر شما به جای یک شبکه دامین از یک شبکه workgroup استفاده می کنید، روند راه اندازی کمی پیچیده تر است، اما ما با این پیش فرض شروع میکنیم که شما میخواهید این قابلیت را در یک workgroup راه اندازی کنید.
فعال کردن قابلیت PowerShell Remoting در ویندوز
برای برقراری ارتباط ریموتی از طریق PowerShell ابتدا شما باید PowerShell Remoting را روی رایانه ای که می خواهید به آن دسترسی داشته باشید فعال کنید. برای اینکار باید روی آن سیستم PowerShell را با دسترسی ادمین باز کنید.
در پنجره PowerShell باز شده cmdlet زیر را تایپ کنید و Enter را فشار دهید:
Enable-PSRemoting -Force
این دستور سرویس WinRM را start کرده و آن را به حالت start Automatically تنظیم می کند و نیز یک firewall rule ایجاد میکند که به incoming connectionها اجازه ورود به سیستم میدهد. قسمت Force- این cmdlet هم به پاورشل میگوید که این اقدامات را بدون نیاز به انجام مرحله به مرحله انجام دهد.
اگر رایانه های شخصی شما بخشی از یک دومین باشند، این همه تنظیماتی است که باید انجام دهید و برای آزمایش اتصال خود به مراحل بعدی نیازی ندارید و میتوانید مستقیما وارد مرحله آزمایش اتصال PowerShell Remoting شوید، اما اگر رایانه های شما به صورت workgroup هستند (مثلا در یک خانه یا محل کسب و کار کوچک هستند) شما باید تنظیم بیشتری را انجام دهید.
توجه داشته باشید که در یک محیط دومین ممکن است قابلیت Remoting به صورت خودکار با تنظیمات group policy توسط admin غیر فعال شده باشد. همچنین ممکن است شما مجوز لازم برای اجرای PowerShell با دسترسی administrator را نداشته باشید. که از این موارد قبل از مرحله آزمایش اتصال PowerShell Remoting باید مطمین شوید.
تنظیم PowerShell Remoting در Workgroup
اگر رایانه های شما در یک دامنه نیستند، باید چندین مرحله دیگر را انجام دهید تا همه چیز تنظیم شود.
توجه: برای تنظیم PowerShell Remoting برای کار در یک محیط workgroup ، با توجه به تفاوت شبکه Private و Public در ویندوز، شما باید شبکه خود را به عنوان private network تنظیم کنید، نه public network.
در مرحله بعد شما باید پیکربندی تنظیمات TrustedHosts روی هر دو کامپیوتری که میخواهید به آن وصل شود و نیز روی کامپیوتری که میخواهید از آن وصل شوید را انجام دهید، تا کامپیوترها به یکدیگر اعتماد داشته باشند.
شما می توانید این کار را از یک از دو روش زیر انجام دهید.
اگر شما در یک home network هستید و می خواهید به یک کامپیوتر برای اتصال از راه دور trust داشته باشید، می توانید cmdlet زیر را در PowerShell تایپ کنید ( به صورت run as Administrator).
Set-Item wsman:\localhost\client\trustedhosts *
ستاره یک نماد علامت گذاری برای همه رایانه های شخصی است. اگر شما می خواهید کامپیوترهایی که می توانند اتصال داشته باشند را محدود کنید، می توانید ستاره را با یک لیست از آدرس های IP و یا Computer Name های مجاز جایگزین کنید.
پس از اجرای این فرمان، باید سرویس WinRM را مجددا راه اندازی کنید تا تنظیمات جدید شما اعمال شود. برای این کار cmdlet زیر را تایپ کنید و سپس Enter کنید:
Restart-Service WinRM
به یاد داشته باشید، شما باید این دو cmdlets را در رایانه ای که میخواهید به آن متصل شوید و همچنین کامپیوتر دیگری که میخواهید از آن متصل شوید اجرا کنید.
آزمایش اتصال قابلیت PowerShell Remoting
اکنون که رایانه خود را برای PowerShell Remoting تنظیم کرده اید، وقت آن است که اتصال را آزمایش کنید. در رایانه ای که می خواهید به یک سیستم از راه دور دسترسی داشته باشید، cmdlet زیر را در PowerShell (عبارت “COMPUTER” موجود را با نام یا IP آدرس کامپیوتر از راه دور خود جایگزین کنید) تایپ کنید و سپس Enter کنید:
Test-WsMan COMPUTER
این فرمان ساده تست سرویس WinRM در کامپیوتر راه دور را اجرا می کند. دقت کنید که به جای “COMPUTER” نام یا آی پی یک کامپیوتر حتی سیستم خودتان را وارد کنید، اگر آن را با موفقیت انجام دادید، اطلاعاتی را در مورد سرویس WinRM کامپیوتر از راه دور در پنجره خواهید دید که نشان می دهد WinRM فعال است و کامپیوتر شما می تواند ارتباط برقرار کند. اگر آزمایش اتصال با شکست مواجه شود، یک پیام خطا مشاهده خواهید کرد.
اجرای یک فرمان راه دور با پاورشل
برای اجرای فرمان در سیستم راه دور، از کامندلت Invoke-Command به صورت زیر استفاده می کنیم:
Invoke-Command -ComputerName COMPUTER -ScriptBlock { COMMAND } -credential USERNAME
“COMPUTER” نشان دهنده نام یا آدرس آی پی کامپیوتر از راه دور است. “COMMAND” فرمانی است که می خواهید اجرا کنید. “USERNAME” نام کاربری است که می خواهد این دستور را به صورت ریموتی اجرا کند. از شما خواسته خواهد شد تا یک رمز عبور برای نام کاربری وارد کنید.
به عنوان مثال من می خواهم محتویات مسیر C: \directory را در یک کامپیوتر ریموتی با آدرس IP 10.1.0.42 مشاهده کنم. من می خواهم از نام کاربری lanmaster استفاده کنم، بنابراین از دستور زیر استفاده می کنم:
Invoke-Command -ComputerName 10.1.0.42 -ScriptBlock {Get-ChildItem C: \} -credential lanmaster
و در پنجره باز شده پسورد یوز lanmaster را باید وارد کنم.
شروع یک Remote Session
اگر چندین cmdlets دارید که می خواهید بر روی کامپیوتر از راه دور اجرا کنید، به جای اینکه کامندلت Invoke-Command و آدرس IP کامپیوتر ریموتی را تایپ کنید، می توانید یک جلسه از راه دور را شروع کنید. برای این کار کافیست فقط cmdlet زیر را تایپ کنید و سپس Enter کنید:
Enter-PSSession -ComputerName COMPUTER -Credential USER
مجددا “COMPUTER” را با نام یا آدرس IP کامپیوتر ریموتی جایگزین کنید و “USER” را با نام حساب کاربری که میخواهید فراخوانی کنید جایگزین کنید.
پنجره برای نشان دادن کامپیوتر از راه دور که به آن متصل هستید تغییر میکند و شما می توانید هر تعداد کامندلت PowerShell را به طور مستقیم بر روی سیستم از راه دور اجرا کنید.
خیلی ممنونم از توضیحات تون. عالی بود