- ارتباط از راه دور از WinRM/WS-Man (HTTP/HTTPS) استفاده میکند و امکان جلسات یک به یک، یک به چند و مداوم را با کنترلهای امنیتی فراهم میکند.
- Enable-PSRemoting سرویس، listenerها و فایروال را پیکربندی میکند؛ HTTPS به یک گواهی معتبر و تطابق CN/SAN نیاز دارد.
- نتایج به صورت deserialized برگردانده میشوند؛ متدها درون بلوک اسکریپت راه دور فراخوانی میشوند و نقاط پایانی سفارشی برای واگذاری دقیق استفاده میشوند.
شما ممکن است همین الان هم بسیاری از وظایف را با PowerShell به صورت محلی خودکار کنید، اما واقعاً کجا میتوانید این کار را انجام دهید؟ کنترل از راه دور PowerShell تفاوت را ایجاد میکند این زمانی است که شما دستوراتی را روی دستگاههای از راه دور، چه چند دستگاه یا صدها دستگاه، به صورت تعاملی یا موازی اجرا میکنید. این فناوری که از Windows PowerShell 2.0 در دسترس است و از Windows PowerShell 3.0 بهبود یافته است، مبتنی بر WS-Management (WinRM) است و ... را تبدیل میکند. PowerShell را در یک کانال مدیریت از راه دور قوی، مقیاسپذیر و امن.
اول از همه، درک دو ایده کلیدی مهم است: cmdlet هایی با پارامتر -ComputerName (مثلاً Get-Process یا Get-Service) مسیر بلندمدتی که توسط مایکروسافت توصیه میشود نیستند، و PowerShell Remoting به عنوان یک «هک» عمل نمیکند. در واقع، احراز هویت متقابل را اعمال میکند، گزارشها را بررسی میکند و مجوزهای معمول شما را رعایت میکند، بدون اینکه اطلاعات کاربری را ذخیره کند یا به طور جادویی چیزی را با امتیازات ویژه اجرا کند.
PowerShell Remoting چیست و چرا باید از آن استفاده کنیم؟
با PowerShell از راه دور می توانید تقریباً هر دستوری را از راه دور اجرا کنید که میتوانید در یک جلسه محلی، از پرسوجوی سرویسها گرفته تا استقرار پیکربندیها، راهاندازی کنید و این کار را روی صدها کامپیوتر به طور همزمان انجام دهید. برخلاف cmdletهایی که -ComputerName را میپذیرند (بسیاری از آنها از DCOM/RPC استفاده میکنند)، Remoting از طریق WS-Man (HTTP/HTTPS) منتقل میشودکه با فایروال سازگارتر است، امکان موازیسازی را فراهم میکند و کار را به میزبان راه دور، نه کلاینت، منتقل میکند.
این به سه مزیت عملی تبدیل میشود: عملکرد بهتر در اجراهای عظیم، اصطکاک کمتر در شبکهها با قوانین محدودکننده و یک مدل امنیتی سازگار با Kerberos/HTTPS. علاوه بر این، با عدم وابستگی به هر cmdlet برای پیادهسازی ریموت مخصوص به خود، Remoting برای هر فیلمنامه یا نقشی مناسب است که در مقصد موجود است.
به طور پیشفرض، سرورهای ویندوز جدید با قابلیت Remoting فعال عرضه میشوند؛ در ویندوز ۱۰/۱۱ شما آن را فعال کنید با یک cmdlet واحد. و بله، میتوانید از اعتبارنامههای جایگزین، جلسات مداوم، نقاط پایانی سفارشی و موارد دیگر استفاده کنید.
توجه: ریموت کردن به معنای باز کردن همه چیز نیست. به طور پیشفرض، فقط مدیران آنها میتوانند متصل شوند و اقدامات تحت هویت آنها اجرا میشود. اگر به تفویض اختیار دقیق نیاز دارید، نقاط پایانی سفارشی به شما این امکان را میدهند که فقط دستورات ضروری را نمایش دهید.

نحوه عملکرد داخلی: WinRM، WS-Man و پورتها
PowerShell Remoting در یک مدل کلاینت-سرور کار میکند. کلاینت درخواستهای WS-Management را از طریق HTTP (5985/TCP) یا HTTPS (5986/TCP)در سیستم هدف، سرویس مدیریت از راه دور ویندوز (WinRM) به درخواستها گوش میدهد، آنها را پردازش میکند (پیکربندی جلسه) و جلسه PowerShell را در پسزمینه میزبانی میکند (فرآیند wsmprovhost.exe). بازگرداندن نتایج سریالی شده به کلاینت در XML از طریق SOAP.
اولین باری که Remoting را فعال میکنید، شنوندهها پیکربندی میشوند، استثنای فایروال مناسب باز میشود و پیکربندیهای جلسه ایجاد میشوند. از PowerShell 6+، چندین نسخه همزمان وجود دارند، و فعال کردن-PSRemoting نقاط پایانی را با نامهایی که نشاندهنده نسخه هستند ثبت میکند (برای مثال، PowerShell.7 و PowerShell.7.xy).
اگر فقط HTTPS را در محیط خود مجاز میدانید، میتوانید یک شنوندهی امن با گواهی صادر شده توسط یک CA معتبر (توصیه میشود). همچنین، یک جایگزین دیگر، استفاده از TrustedHosts به صورت محدود و با در نظر گرفتن ریسک، برای سناریوهای گروه کاری یا رایانههای غیر دامنه است.
توجه داشته باشید که Powershell Remoting میتواند با cmdletهایی که دارای -ComputerName هستند، همزیستی داشته باشد، اما مایکروسافت WS-Man را به چالش میکشد به عنوان روشی استاندارد و آیندهنگر برای مدیریت از راه دور.
فعال کردن PowerShell Remoting و پارامترهای مفید
در ویندوز، فقط PowerShell را به عنوان مدیر باز کنید و اجرا کنید فعال کردن-PSRemotingسیستم WinRM را اجرا میکند، راهاندازی خودکار را پیکربندی میکند، شنونده را فعال میکند و قوانین فایروال مناسب را ایجاد میکند. در کلاینتهایی با پروفایل شبکه عمومی، میتوانید عمداً این کار را با ... انجام دهید. -بررسی پروفایل شبکه -SkipNetwork (و سپس با قوانین خاص تقویت کنید):
Enable-PSRemoting
Enable-PSRemoting -Force
Enable-PSRemoting -SkipNetworkProfileCheck -Force
این سینتکس همچنین اجازه میدهد، -تایید y -چه می شود اگر برای کنترل تغییر. به یاد داشته باشید: فقط در ویندوز قابل استفاده استو شما باید کنسول بالا را اجرا کنید. قوانین ایجاد شده بین نسخههای سرور و کلاینت متفاوت است، به خصوص در شبکههای عمومی، که به طور پیشفرض به زیرشبکه محلی محدود میشوند، مگر اینکه دامنه را گسترش دهید (برای مثال، با Set-NetFirewallRule).
برای فهرست کردن پیکربندیهای جلسه که از قبل ضبط شدهاند و تأیید اینکه همه چیز آماده است، از دستور زیر استفاده کنید. Get-PSSessionConfigurationاگر نقاط پایانی PowerShell.x و Workflow ظاهر شوند، چارچوب Remoting عملیاتی شده است.

حالتهای استفاده: ۱ به ۱، ۱ به چند، و جلسات مداوم
وقتی به یک کنسول تعاملی روی یک کامپیوتر نیاز دارید، به ... مراجعه کنید. Enter-PSSessionاعلان ظاهر میشود و هر چیزی که اجرا کنید به میزبان راه دور میرود. میتوانید با استفاده از Get-Credential از اعتبارنامهها دوباره استفاده کنید تا از وارد کردن مجدد آنها جلوگیری کنید:
$cred = Get-Credential
Enter-PSSession -ComputerName dc01 -Credential $cred
Exit-PSSession
اگر به دنبال ارسال دستورات به چندین کامپیوتر به طور همزمان هستید، این ابزار ... فراخوانی فرماندهی با یک اسکریپت بلاک. به طور پیشفرض، حداکثر ۳۲ اتصال همزمان را راهاندازی میکند (که با -ThrottleLimit قابل تنظیم است). نتایج به صورت زیر برگردانده میشوند: اشیاء غیر سریالی شده (بدون متدهای «زنده»):
Invoke-Command -ComputerName dc01,sql02,web01 -ScriptBlock { Get-Service -Name W32Time } -Credential $cred
آیا نیاز به فراخوانی متدی مانند .Stop() یا .Start() دارید؟ این کار را انجام دهید. درون بلوک اسکریپت در زمینه راه دور، نه شیء deserialized محلی، و همین. اگر دستور معادلی (Stop-Service/Start-Service) وجود دارد، معمولاً برای وضوح بیشتر، استفاده از آن ترجیح داده میشود.
برای جلوگیری از هزینه شروع و پایان جلسات در هر تماس، یک PSSession مداوم و آن را در چندین فراخوانی مجدد استفاده کنید. برای ایجاد اتصال از New-PSSession و برای استفاده مجدد از تونل از Invoke-Command-Session استفاده کنید. فراموش نکنید که پس از اتمام کار، آن را با Remove-PSSession ببندید.
سریالسازی، محدودیتها و شیوههای خوب
یک نکته مهم: هنگام سفر، اشیاء "+صاف" میشوند و به صورت ... میرسند. اسنپشاتهای deserialized، با ویژگیها اما بدون متد. این کار عمدی است و باعث صرفهجویی در پهنای باند میشود، اما به این معنی است که نمیتوانید از اعضایی که منطق را اجرا میکنند (مانند .Kill()) در کپی محلی استفاده کنید. راه حل واضح است: آن متدها را فراخوانی کنید. از راه دور و اگر فقط به فیلدهای خاصی نیاز دارید، با Select-Object فیلتر کنید تا دادههای کمتری ارسال شود.
در اسکریپتها، از Enter-PSSession (که برای استفاده تعاملی در نظر گرفته شده است) اجتناب کنید و از Invoke-Command با بلوکهای اسکریپت استفاده کنید. اگر چندین فراخوانی را پیشبینی میکنید یا نیاز به حفظ وضعیت (متغیرها، ماژولهای وارد شده) دارید، از جلسات مداوم استفاده کنید و در صورت لزوم، آنها را با Disconnect-PSSession/Connect-PSSession در PowerShell 3.0+ قطع/دوباره وصل کنید.
احراز هویت، HTTPS و سناریوهای خارج از دامنه
در یک دامنه، احراز هویت بومی به صورت زیر است: Kerberos و همه چیز روان میشود. وقتی دستگاه نمیتواند نام سرور را تأیید کند، یا به یک IP CNAME یا نام مستعار متصل میشوید، به یکی از این دو گزینه نیاز دارید: ۱) شنونده HTTPS با گواهی توسط یک مرجع صدور گواهی معتبر که به آن اعتماد دارید صادر شده باشد، یا ۲) مقصد (نام یا IP) را به TrustedHosts اضافه کنید و از اعتبارنامهها استفاده کنیدگزینه دوم، احراز هویت متقابل را برای آن میزبان غیرفعال میکند، بنابراین دامنه را به حداقل لازم کاهش میدهد.
راهاندازی یک شنونده HTTPS نیاز به یک گواهی (در حالت ایدهآل از PKI یا یک CA عمومی) دارد که در فروشگاه تیم نصب شده و به WinRM متصل شود. سپس پورت ۵۹۸۶/TCP در فایروال باز میشود و از سمت کلاینت مورد استفاده قرار میگیرد. -استفاده از SSL در cmdlet های راه دور. برای احراز هویت گواهی مشتری، میتوانید یک گواهی را به یک حساب محلی نگاشت کنید و با آن ارتباط برقرار کنید. -اثر انگشت گواهی (Enter-PSSession این را مستقیماً نمیپذیرد؛ ابتدا جلسه را با New-PSSession ایجاد کنید.)
گام دوم و تفویض اعتبارنامهها
اصطلاح معروف «دو جهش» زمانی ظاهر میشود که پس از اتصال به یک سرور، برای دسترسی به ... به آن سرور نیاز دارید. منبع سوم از طرف شما (مثلاً یک اشتراک SMB). دو رویکرد برای مجاز کردن این امر وجود دارد: CredSSP و واگذاری Kerberos با محدودیت مبتنی بر منابع.
با CredSSP شما به کلاینت و واسطه اجازه میدهید تا به طور صریح اعتبارنامهها را واگذار کنند، و یک سیاست (GPO) تنظیم میکنید تا واگذاری به رایانههای خاص را مجاز کند. پیکربندی آن سریع است، اما امنیت کمتری دارد زیرا اعتبارنامهها به صورت متن واضح در تونل رمزگذاری شده منتقل میشوند. همیشه منابع و مقصدها را محدود کنید.
جایگزین ترجیحی در دامنه عبارت است از نمایندگی محدود Kerberos (واگذاری محدود مبتنی بر منابع) در AD مدرن. این به نقطه پایانی اجازه میدهد تا برای سرویسهای خاص به دریافت واگذاری از نقطه میانی متکی باشد و از افشای هویت شما در اتصال اولیه جلوگیری کند. به کنترلکنندههای دامنه جدید و RSAT بهروزرسانیشده نیاز دارد.
نقاط پایانی سفارشی (پیکربندیهای جلسه)
یکی از مزایای Remoting، امکان ثبت نقاط اتصال با ... است. قابلیتها و محدودیتهای متناسبابتدا یک فایل با New-PSSessionConfigurationFile (ماژولهایی برای پیشبارگذاری، توابع قابل مشاهده، نامهای مستعار، ExecutionPolicy، LanguageMode و غیره) ایجاد میکنید و سپس آن را با Register-PSSessionConfiguration ثبت میکنید، جایی که میتوانید تنظیم کنید اعتبارنامهی اجرا و مجوزها (رابط SDDL یا GUI با -ShowSecurityDescriptorUI).
برای واگذاری ایمن، فقط موارد ضروری را با استفاده از -VisibleCmdlets/-VisibleFunctions نمایش دهید و در صورت لزوم، اسکریپتنویسی آزاد را غیرفعال کنید. حالت زبانمحدود شدهزبان یا NoLanguage. اگر FullLanguage را ترک کنید، شخصی میتواند از یک بلوک اسکریپت برای فراخوانی دستورات نمایش داده نشده استفاده کند، که در ترکیب با RunAs، سوراخی خواهد بوداین نقاط انتهایی را با یک شانه دندانه ریز طراحی کنید و دامنه آنها را مستند کنید.
دامنهها، GPOها و گروهافزار
در AD میتوانید Powershell Remoting را در مقیاس بزرگ با GPO مستقر کنید: اجازه پیکربندی خودکار شنودکنندگان WinRM را بدهید، سرویس را روی خودکار تنظیم کنیدو استثنای فایروال را ایجاد کنید. به یاد داشته باشید که GPOها تنظیمات را تغییر میدهند، اما همیشه سرویس را فوراً فعال نمیکنند؛ گاهی اوقات نیاز دارید که سیستم را مجدداً راهاندازی کنید یا gpupdate را اجباری کنید.
در گروههای کاری (غیر دامنهای)، Remoting را با فعال کردن-PSRemoting، TrustedHosts را روی کلاینت تنظیم کنید (winrm set winrm/config/client @{TrustedHosts=»host1,host2″}) و از اعتبارنامههای محلی استفاده کنید. برای HTTPS، میتوانید گواهیهای خودامضا شده را نصب کنید، اگرچه توصیه میشود از یک CA معتبر استفاده کنید و نام را تأیید کنید که شما در -ComputerName در گواهی (مطابقت CN/SAN) از آن استفاده خواهید کرد.
دستورات کلیدی و سینتکس
تعداد انگشت شماری از کماندوها منطقه را پوشش میدهند ۹۰٪ سناریوهای روزانهبرای فعال/غیرفعال کردن:
Enable-PSRemoting
Disable-PSRemoting
جلسه تعاملی ۱ به ۱ و خروج:
Enter-PSSession -ComputerName SEC504STUDENT
Exit-PSSession
۱ به چند، با موازیسازی و اعتبارسنجی:
Invoke-Command -ComputerName dc01,sql02,web01 -ScriptBlock { Get-Service W32Time } -Credential $cred
جلسات مداوم و استفاده مجدد:
$s = New-PSSession -ComputerName localhost -ConfigurationName PowerShell.7
Invoke-Command -Session $s -ScriptBlock { $PSVersionTable }
Remove-PSSession $s
تست و WinRM مفید:
Test-WSMan -ComputerName host
winrm get winrm/config
winrm enumerate winrm/config/listener
winrm quickconfig -transport:https
نکات کاربردی در مورد فایروال، شبکه و پورتها
روی کامپیوتر هدف و ...، برای HTTP، 5985/TCP و برای HTTPS، 5986/TCP را باز کنید. هر فایروال واسطهایدر کلاینتهای ویندوز، Enable-PSRemoting قوانینی برای دامنه و پروفایلهای خصوصی ایجاد میکند؛ برای پروفایلهای عمومی، این قوانین به زیرشبکه محلی محدود میشوند، مگر اینکه محدوده را با Set-NetFirewallRule -RemoteAddress Any (مقداری که میتوانید بر اساس ریسک خود ارزیابی کنید) تغییر دهید.
اگر از یکپارچهسازیهای SOAR/SIEM که دستورات از راه دور را اجرا میکنند (مثلاً از XSOAR) استفاده میکنید، مطمئن شوید که سرور وضوح DNS به میزبانها، اتصال به ۵۹۸۵/۵۹۸۶، و اعتبارنامههایی با مجوزهای محلی کافی. در برخی موارد، احراز هویت NTLM/Basic ممکن است نیاز به تنظیم داشته باشد (مثلاً استفاده از یک کاربر محلی در Basic با SSL).
پارامترهای Enable-PSRemoting (خلاصه عملیاتی)
-Confirm قبل از اجرا، درخواست تأیید میکند؛ -Force هشدارها را نادیده میگیرد و تغییرات لازم را اعمال کنید؛ -SkipNetworkProfileCheck امکان کنترل از راه دور را در شبکههای کلاینت عمومی فعال میکند (که به طور پیشفرض به زیرشبکه محلی محدود شده است)؛ -WhatIf به شما نشان میدهد که بدون اعمال تغییرات چه اتفاقی میافتد. علاوه بر این، مانند هر cmdlet استانداردی، از ... پشتیبانی میکند. پارامترهای مشترک (-Verbose، -ErrorAction و غیره).
به یاد داشته باشید که «فعال کردن» برای شما شنوندههای HTTPS یا گواهینامه ایجاد نمیکند؛ اگر از ابتدا به رمزگذاری سرتاسری و احراز هویت بر اساس ... نیاز دارید، گواهی، شنونده HTTPS را پیکربندی کنید و CN/SAN را در برابر نامی که در -ComputerName استفاده خواهید کرد، اعتبارسنجی کنید.
دستورات مفید WinRM و PowerShell برای ریموت کردن
بعضی وسایل ضروری کنار تخت خواب برای زندگی روزمره:
winrm get winrm/config
winrm enumerate winrm/config/listener
Set-NetFirewallRule -Name 'WINRM-HTTP-In-TCP' -RemoteAddress Any
Test-WSMan -ComputerName host -Authentication Default -Credential (Get-Credential)
New-PSSession -ComputerName host
Enter-PSSession -ComputerName host
Enable-PSRemoting -SkipNetworkProfileCheck -Force
هنگام مدیریت ویندوز در مقیاس بزرگ، Remoting به شما امکان میدهد از رویکرد «کامپیوتر به کامپیوتر» به یک رویکرد اعلانی و امن تغییر دهید. با ترکیب جلسات مداوم، احراز هویت قوی (Kerberos/HTTPS)، نقاط انتهایی محدود شده و ردیابیهای پاک برای تشخیص، شما سرعت و کنترل را به دست میآورید بدون قربانی کردن امنیت یا ممیزی. اگر فعالسازی GPO را نیز استانداردسازی کنید و بر موارد خاص (TrustedHosts، double hop، certificates) مسلط شوید، یک پلتفرم از راه دور قوی برای عملیات روزانه و پاسخ به حوادث خواهید داشت.
ویراستار متخصص در مسائل فناوری و اینترنت با بیش از ده سال تجربه در رسانه های مختلف دیجیتال. من به عنوان ویراستار و تولید کننده محتوا برای شرکت های تجارت الکترونیک، ارتباطات، بازاریابی آنلاین و تبلیغات کار کرده ام. من همچنین در وب سایت های اقتصاد، دارایی و سایر بخش ها نوشته ام. کار من نیز علاقه من است. اکنون، از طریق مقالات من در Tecnobits، سعی می کنم تمام اخبار و فرصت های جدیدی را که دنیای فناوری هر روز برای بهبود زندگی مان به ما ارائه می دهد، کشف کنم.