Ochiq
Yopish

Powershell orqali boshqa kompyuterga ulanish. Powershell: Invoke-Command cmdletidan foydalanish. Birga ko'p boshqaruv

  • Oʻquv qoʻllanma

Bu erda minimal nazariya, asosan amaliy qism mavjud. U WinRM-ni qanday sozlashni, tarmoq adapteri profilini qanday o'zgartirishni tasvirlaydi, filtrlash bilan TrustedHosts-ga qo'shish uchun skriptni taqdim etadi, ishonchli xostlar nima uchun kerakligini tushuntiradi va masofaviy mashinalarni o'tirib, darhol boshqarishingiz uchun yuzaki masofaviy ulanishlarni muhokama qiladi.

Masofadan boshqarish pultini sozlashning eng oson yo'li ishga tushirishdir Yoqish-PSRemoting Powershell-da administrator huquqlari bilan. Quyidagilar sodir bo'ladi:

  • WinRM xizmati ishga tushadi (agar ishlayotgan bo'lsa, u qayta ishga tushadi)
  • WinRM xizmati ishga tushirilganda holatga o'tadi - avtomatik ishga tushirish
  • uchun WinRM tinglovchisi yaratiladi HTTP portdagi trafik 5985 barcha mahalliy IP manzillar uchun
  • WinRM tinglovchisi uchun xavfsizlik devori qoidasi yaratiladi. Diqqat, agar tarmoq kartalaridan birortasi "ommaviy" tarmoq turiga ega bo'lsa, bu qadam xato bilan muvaffaqiyatsiz bo'ladi, chunki bunday kartada portni ochish yaxshi emas. Agar konfiguratsiya paytida ushbu xatoga duch kelsangiz, ushbu tarmoq cmdletining profilini o'zgartiring Set-NetConnectionProfile va undan keyin Enable-PSRemoting-ni yana ishga tushiring. Agar sizga “Ommaviy tarmoq” profiliga ega tarmoq kartasi kerak bo‘lsa, Enable-PSRemoting-ni parametr bilan ishga tushiring. -SkipNetworkProfileCheck bu holda xavfsizlik devori qoidalari faqat mahalliy tarmoqdan yaratiladi.
Shundan so'ng, boshqaruv amalga oshiriladigan mashinadan masofaviy mashinaga ulanishga ruxsat berishingiz kerak. Bu xavfsizlik maqsadida amalga oshirildi, chunki masofaviy boshqaruv seansi yoki DNS-ni masofadan boshqarish moslamasi o'rniga o'zingizni almashtirish orqali buzish xavfini kamaytirish va siz majburan ruxsat bermagan mashinalarda skriptlarning bajarilishini oldini olish.

Qaerga ulanishingiz mumkinligini tekshirish uchun quyidagilardan foydalaning:
get-item wsman:\localhost\Client\TrustedHosts
hammaga ulanish uchun ruxsat uchun
set-element wsman: localhost\client\trustedhosts -value *
Agar * ni belgilash orqali hammaga kirishni ochsangiz, WinRM BARCHA mashinalarga tekshirilmasdan ulanadi. Esda tutingki, siz mahalliy tarmog'ingizdan potentsial xakerlik uchun o'zingizni ochmoqdasiz. Ulanishingiz kerak bo'lgan xost manzillarini ko'rsatish yaxshiroqdir, keyin WinRM boshqa barcha manzillar yoki nomlarni rad etadi. Agar boshqariladigan mashina domenda bo'lsa, u ushbu domendagi barcha mashinalarga ishonadi. Agar u domenda yoki boshqa domenda bo'lmasa, TrustedHosts-da biz ulanadigan mashinaning manzilini yoki nomini ko'rsatishingiz kerak. Biz ulanayotgan mashinada o'zingizni qo'shishning hojati yo'q.

Yordam buyruqlarni o'z ichiga oladi, men ularni skriptga biroz o'zgartirdim
################################################# #############################################################################################################################################################################, agar bunday qator allaqachon mavjud bo'lsa, filtrlash bilan TrustedHost ro'yxatiga NewHost qo'shadi. # Parametrni to'g'ridan-to'g'ri belgilash orqali uni buyruq satridan tortib olishingiz mumkin, masalan # .\Add-TrustedHost.ps1 192.168.2.1 #################### ################################################# ######## ###### param ($NewHost = "192.168.2.89") Write-Host "host qo'shish: $NewHost" $prev = (get-item WSMan:\localhost\Client\TrustedHosts ).qiymat agar (($prev .Contains($NewHost)) -eq $false) ( if ($prev -eq "") ( set-element WSMan:\localhost\Client\TrustedHosts -Value "$) NewHost" } else { set-item WSMan:\localhost\Client\TrustedHosts -Value "$prev, $NewHost" } } Write-Host "" Write-Host "Now TrustedHosts contains:" (get-item WSMan:\localhost\Client\TrustedHosts).value !}
u bunday yozuv mavjudligini tekshiradi, agar mavjud bo'lmasa, uni ro'yxatga qo'shadi; Manzil yoki ismni ko'rsatib, buyruq satridan qo'ng'iroq qilishingiz mumkin.

Ism yoki manzilni ko'rsatish o'rtasida farq bor. Agar TrustedHosts-da faqat manzil mavjud bo'lsa, unda nom bo'yicha sessiyani ochish mumkin bo'lmaydi va aksincha - agar siz nom ko'rsatsangiz, u holda manzilga biriktirib bo'lmaydi. Buni hisobga oling.

nima farqi bor

Enable-PSRemoting "winrm quickconfig" dan ko'proq narsani bajaradi. Set-WSManQuickConfig cmdleti aynan "winrm quickconfig" bilan bir xil ishni bajaradi. Enable-PSRemoting tizimni sozlashda Set-WSManQuickConfig-ni ishga tushiradi

Masofaviy ulanishlar
1. 1 dan 1 gacha seanslar
buyruq bilan ochish
Enter-PSSession -ComputerName testi
Masofaviy mashinada qobiq olasiz. Siz localhost-ni ko'rsatib, o'zingizga ulanishingiz mumkin. Muqobil kreditlar parametr bilan belgilanadi - Ishonchnoma, chiqish cmdlet bilan sodir bo'ladi Chiqish-PSSession

Cheklovlar quyidagilardan iborat:

  • siz ikkinchi sakrashni amalga oshira olmaysiz - faqat 1 seans, seans ichida keyingi ulanishni amalga oshira olmaysiz
  • GUI buyruqlaridan foydalana olmaysiz. Agar shunday qilsangiz, qobiq osilib qoladi, osib qo'yish uchun Ctrl+C tugmalarini bosing
  • o'z qobig'iga ega bo'lgan buyruqlarni ishga tushira olmaysiz, masalan, nslookup, netsh
  • agar masofaviy mashinada ishga tushirish siyosati ularni ishga tushirishga imkon bersa, skriptlarni ishga tushirishingiz mumkin
  • siz interaktiv seansga qo'shila olmaysiz, "tarmoqqa kirish" sifatida tizimga kirasiz, ular tarmoq diskiga ulangandek. Shunday qilib, tizimga kirish skriptlari ishlamaydi va siz masofaviy kompyuterda bosh papkani olmasligingiz mumkin (uy papkalarini tizimga kirish skriptlari bilan taqqoslamaslikning yana bir sababi)
  • Agar u tizimga kirgan bo'lsa ham, siz masofaviy mashinada foydalanuvchi bilan muloqot qila olmaysiz. Siz unga oynani ko'rsata olmaysiz yoki u uchun biror narsa chop eta olmaysiz.
Bu usul oddiy operatsiyalar uchun eng yaxshisidir: men tizimga kirdim, serverni tortdim va uzildim. Agar siz o'zgaruvchilarni birga saqlashingiz kerak bo'lsa, sizga uzoq operatsiya (ko'p soat yoki kun) kerak bo'lsa, sizga ko'proq ma'muriy imkoniyatlar kerak, keyin esa ilg'or texnologiyalardan foydalanishingiz kerak.
Izoh.
tarmoq orqali uzatiladigan ob'ektlar uzilib qoladi va yashashni to'xtatadi. Ularning usullari olib tashlanadi, lekin ularning xususiyatlari qoladi. Siz mashinangizga biror narsani tortib ololmaysiz, sehr-jodu qilolmaysiz va uni qayta joylashtirolmaysiz. Agar sizga ko'proq kerak bo'lsa, yozing, men uni alohida qo'shaman.

2. 1-dan ko'p seanslar
Chaqiruv - Buyruq
Biz nima qilishimizni quyidagicha belgilaymiz:
$sb = (nuqta-vergul bilan ajratilgan masofaviy mashina uchun buyruqlar)
Test1 va Test2 ni masofaviy mashinalarga uzatish
Invoke-Command -ComputerName Test1, Test2 -ScriptBlock $sb
Siz uni bir vaqtning o'zida 32 ta mashinaga tashlashingiz mumkin. Agar muqobil kreditlar mavjud bo'lsa, -Credential parametridan foydalaning

Biz -FilePath yozamiz -ScriptBlock parametri o'rniga butun skriptni uzatish uchun masofaviy mashina faylga kirish huquqiga ega bo'lishi shart EMAS, u qismlarga bo'linadi, HTTP orqali uzatiladi va boshqa tomondan bajariladi.

Esda tutingki, u tomonda yangi skript bo'ladi, shuning uchun skriptingiz konsolingizdan qiymatlarni olmaydi va skript o'zgaruvchilari bu tomonda bo'sh bo'lishi mumkin. Shuning uchun, bir vaqtning o'zida parametrlari bilan to'liq tayyor ko'rsatmalar va skriptlarni o'tkazing.

Invoke-Command-dan to'liq foydalanish uchun siz satrlarni skript bloklariga aylantira olishingiz kerak. Misol uchun, sizda ba'zi ro'yxatga bog'liq buyruqlar mavjud, siz qatorni yaratishingiz, uni ScriptBlock-ga aylantirishingiz va uni masofaviy kompyuterga yuborishingiz kerak:
$sb = ::Create($SomeString)
quda78
Maqola juda muhim nuqtani o'tkazib yubordi - parametrlarni masofaviy kompyuterdagi skriptga o'tkazish.

$deployRemote = (
param(
$targetEnvName,
$targetUsername)
$Global:ErrorActionPreference = "To'xtatish"
#…
}

Invoke-Buyruq -Session $session -ScriptBlock $deployRemote -ArgumentList ($targetEnvName, $targetUsername)


Ha, albatta, o'tkazib yuborilgan. Sharhni parametrlar va tavsiflar bilan aralashtirib yubormaslik uchun men buni ataylab qildim. Rahmat. -ArgumentList parametri ham skript bloklari, ham skriptlar bilan ishlaydi

3. Seanslar
Bu kodning nusxasi boshqa tomondan yaratilib, doimiy ravishda xotirada osilib turadi va unga buyruqlar yuboriladi. Natijada, siz unga qayta ulanishingiz mumkin, uni bajarish uchun uzoq vaqt davomida ishga tushirishingiz yoki turli skriptlardan yoki turli foydalanuvchilardan ulanishingiz mumkin. Misol uchun, sizda bitta muammoni qismlarga bo'lib hal qiladigan skriptlar to'plami mavjud, ularning har biri o'z navbatida bitta masofaviy seansga ulanishi, oldingi buyruqlar natijalarini ko'rishi, bir xil yuklangan modullarga, umumiy o'zgaruvchilarga, umumiy muhitga ega bo'lishi mumkin. sessiya majburan yopildi.

Seans New-PSSession cmdlet yordamida yaratilgan, natijani o'zgaruvchiga joylashtirish mumkin
$DC01 = Yangi-PSSession -ComputerName DC01 $Controllers = Yangi-PSSession DC01, DC02, DC03
Invoke-Command-dagi kabi ulanish parametrlaridan foydalanishingiz mumkin

Qanday ishlatish:
agar 1 dan 1 gacha
Kirish-PSSession -Session $DC01
agar 1 dan ko'p bo'lsa
Invoke-Command -Sessions $Controllers -ScriptBlock (get-eventlog -logname security -newest 50)
Get-PSSession yordamida qaysi seanslar ochiqligini ko'rishingiz mumkin, Remove-PSSession-ni yoping
barcha seanslarni butunlay yoping
Get-PSSession | O'chirish-PSSession
Connect-PSSession yordamida seansga qo'shishingiz, Disconnect-PSSession yordamida o'chirishingiz mumkin

Invoke-Command darhol uzilgan seansni yaratishi mumkin, u bajarish uchun buyruqlar yuboradi va keyinroq siz ulanishingiz va ish natijalarini yuklab olishingiz mumkin; Bu -Disconnected parametri bilan amalga oshiriladi. Recieve-PSSession cmdlet yordamida natijalarni olish.

Seanslarda juda ko'p sozlamalar mavjud, hatto kesilgan buyruqlar, modullar va boshqalar to'plami bilan seanslar yaratish mumkin. Maxsus so'nggi nuqtalar deb ataladi

Yaqinda men Powershell orqali masofaviy kirishni sozlash uchun biroz vaqt sarflashim kerak edi. Menimcha, bu yondashuv bir qator holatlarda Masofaviy ish stoli xizmatlariga juda yaxshi alternativ bo'lib tuyuladi (masofaviy VDS xostingida xizmatni qayta ishga tushiring, zaxira nusxalarini yarating, tizim holatini ko'ring va hokazo).

Masofaviy Powershell seanslarini yaratish imkoniyati 2-versiyada joriy qilingan. Buning uchun Enter-PSSession / Invoke-Command cmdletidan foydalaning. Biroq, ularni ishlatishdan oldin atrof-muhitni tayyorlash kerak.

Nima qilamiz serverda:

1-qadam: Powershell konsolini oching va Force tugmasi yordamida Enable-PSRemoting cmdlet yordamida masofaviy seanslarni yoqing.

Yoqish-PSRemoting -Majburlash

2-qadam: WinRM xizmati ishlayotganligiga ishonch hosil qiling.

WinRM xizmatini ishga tushirish

3-qadam: Kiruvchi ulanishlar mumkin bo'lishi uchun biz xavfsizlik devoridagi qoidalarni sozlaymiz.

Sifatida foydalaniladigan kompyuterda mijoz Bundan tashqari, bir necha bosqichlarni bajarishingiz kerak:

1-qadam: Masofaviy hostlarga ulanishga ruxsat bering. Har qanday tugunlarga kirish uchun siz quyidagi konstruktsiyadan foydalanishingiz mumkin:

Set-Item wsman:\localhost\client\trustedhosts * -Force

2-qadam: Xavfsizlik devoringiz chiquvchi ulanishlarni bloklamasligiga ishonch hosil qiling.

Endi Powershell orqali masofaviy tugunga ulanish uchun buni amalga oshirishingiz mumkin:

Kirish-PSSession 192.168.1.160 - VMNAME\User hisob ma'lumotlari

192.168.1.160 va VMNAME\User qiymatlari serverdagi masofaviy xost manzili va Windows foydalanuvchi nomi bilan almashtirilishi kerak.

Endi Powershell orqali masofadan kirish ishlaydi. Biroq, yana bir nuance bor. Ehtimol, ba'zilaringiz Powershell-da profillardan foydalanadilar. Profillar - bu konsolning o'zi ishga tushirilganda ishga tushiriladigan maxsus skriptlar. Bu erda, masalan, barcha kerakli taxalluslarni belgilashingiz va dastlabki qadamlarni bajarishingiz mumkin.

Muammo shundaki, masofaviy seanslardan foydalanganda profillar ishga tushmaydi. Buni turli xil ulanish konfiguratsiyalari yordamida hal qilish mumkin. Buni amalga oshirish uchun avvalo masofaviy serverda konfiguratsiyani ro'yxatdan o'tkazishingiz kerak. Buni Register-PSSessionConfiguration cmdletini ishga tushirish orqali amalga oshirishingiz mumkin. Bunday holda, har bir konfiguratsiyaga nom beriladi. Har bir konfiguratsiya uchun siz seans boshlanganda bajariladigan skriptga yo'lni belgilashingiz mumkin.

Register-PSSessionConfiguration -name Config1 -startupScript c:\scripts\Startup.ps1

Keyin, masofaviy xostga ulanishda Enter-PSSession cmdletidan foydalanganda konfiguratsiya nomini ko'rsatishingiz kerak.

Enter-PSSession 192.168.1.160 -ConfigurationName Config1 -Kredit ma'lumotlari VMNAME\User

Endi siz Remote Desktop Services orqali ulanish seansini yaratish uchun server resurslarini isrof qilishdan qochishingiz va Powershell yordamida serverni masofadan boshqarishingiz mumkin.

powershell masofaviy dasturini ishga tushirish

Interaktiv seansni boshlash

Bitta masofaviy kompyuter bilan interaktiv seansni boshlash uchun Enter-PSSession cmdletidan foydalaning. Masalan, uzoq kompyuter Server01 bilan interaktiv seansni boshlash uchun quyidagilarni kiriting:
Enter-pssession Server01
Buyruqning satri siz ulangan kompyuterning nomini ko'rsatadi. Kelajakda buyruq satriga kiritilgan barcha buyruqlar masofaviy kompyuterda ishga tushiriladi va natijalar mahalliy kompyuterda ko'rsatiladi.
Interaktiv seansni tugatish uchun quyidagilarni kiriting:
chiqish-ehtiros

Masofaviy buyruqni bajarish

Bir yoki bir nechta masofaviy kompyuterlarda istalgan buyruqni ishga tushirish uchun Invoke-Command cmdlet-dan foydalaning. Masalan, Server01 va Server02 masofaviy kompyuterlarida Get-UICulture buyrug'ini ishga tushirish uchun quyidagilarni kiriting:

Invoke-command -kompyuter nomi Server01, Server02 (get-UICulture)
Chiqish kompyuteringizga qaytariladi.
Skriptni bir yoki bir nechta masofaviy kompyuterlarda ishga tushirish uchun Invoke-Command cmdletining FilePath parametridan foydalaning. Skript yoqilgan yoki mahalliy kompyuterda mavjud bo'lishi kerak. Natijalar mahalliy kompyuteringizga qaytariladi.
Masalan, quyidagi buyruq Server01 va Server02 masofaviy kompyuterlarida DiskCollect.ps1 skriptini ishga tushiradi.
chaqirish buyrug'i - kompyuter nomi Server01, Server02 - fayl yo'li c:\Scripts\DiskCollect.ps1

Doimiy ulanishni o'rnatish
Birgalikda ma'lumotlar bilan bir qator tegishli buyruqlarni ishga tushirish uchun masofaviy kompyuterda seans yarating va keyin yaratilgan seansda buyruqlarni ishga tushirish uchun Invoke-Command cmdletidan foydalaning. Masofaviy seans yaratish uchun New-PSSession cmdletidan foydalaning.
Masalan, quyidagi buyruq Server01 kompyuterida masofaviy seans va Server02 kompyuterida boshqa masofaviy seans yaratadi. Seans ob'ektlarini $s o'zgaruvchisida saqlaydi.
$s = new-pssession -kompyuter nomi Server01, Server02
Seanslar o'rnatilgandan so'ng, ular ustida istalgan buyruqni bajarishingiz mumkin. Seanslar doimiy bo'lgani uchun siz bitta buyruqda ma'lumotlarni to'plashingiz va undan keyingi buyruqda foydalanishingiz mumkin.
Masalan, quyidagi buyruq Get-Hotfix buyrug'ini $s o'zgaruvchisidagi sessiyalar bo'ylab ishga tushiradi va natijalarni $h o'zgaruvchisida saqlaydi. $h oʻzgaruvchisi har bir seansda $s da yaratiladi, lekin u mahalliy seansda mavjud emas.
chaqirish buyrug'i -session $s ($h = tuzatishni olish)
Endi $h dagi ma'lumotlardan quyidagi kabi keyingi buyruqlarda foydalanish mumkin. Natijalar mahalliy kompyuteringizda ko'rsatiladi.

Chaqiruv buyrug'i -sessiya $s ($h | bu erda ($_.o'rnatilgan -ne "NTAUTHORITY\SYSTEM")

Hammasi https://technet.microsoft.com/ru-ru/library/dd819505.aspx dan olingan

Bugungi kunda PowerShell Remoting Windows operatsion tizimlarini masofadan boshqarish uchun asosiy vositadir. Shuning uchun, har bir Windows tizimi ma'muri uning imkoniyatlari haqida bilishi va kundalik vazifalarida foydalanishi kerak. PowerShell Remoting yordamida masofaviy kompyuterlarda buyruqlarni ishga tushirish uchun siz Powershell cmdletidan foydalanishingiz mumkin Chaqiruv - Buyruq(taxallus icm).

Invoke-Command komdletining funksionalligi Web Services for Management protokoliga asoslanadi ( WS-Menejment) va Windows masofadan boshqarish xizmati ( WinRM), aloqa uchun ishlatiladi. Kompyuterlar orasidagi aloqa HTTP (standart) yoki HTTPS yordamida amalga oshiriladi. Ikki kompyuter o'rtasidagi barcha trafik protokol darajasida shifrlangan. Bir nechta autentifikatsiya usullari qo'llab-quvvatlanadi, jumladan NTLM va Kerberos. Masofaviy seanslarni yaratish imkoniyati Powershell 2.0 da joriy qilingan.

PowerShell Remoting orqali kompyuterga masofadan ulanish uchun siz bir qator sozlamalarni bajarishingiz kerak:

  1. Masofaviy ulanishlarga ruxsat berishingiz kerak: Enable-PSRemoting -Force
  2. WinRM xizmatini ishga tushiring: Start-Service WinRM
  3. Ushbu protokol yordamida kiruvchi ulanishlarga ruxsat beruvchi Windows xavfsizlik devori qoidasini yarating.

PowerShell Remoting orqali boshqa kompyuterlar/serverlarni masofadan boshqarishni rejalashtirgan kompyuter ham sozlanishi kerak:

  1. Masofaviy tizimlarga ulanishga ruxsat berishingiz kerak. Barcha masofaviy kompyuterlarga kirishni ta'minlash uchun quyidagi buyruqdan foydalaning: Set-Item wsman:\localhost\client\trustedhosts * -Force
  2. Xavfsizlik devoringiz chiquvchi ulanishlarni bloklamasligiga ishonch hosil qiling.

Endi Powershell Remoting orqali masofaviy kompyuterda buyruqni ishga tushirish uchun (masalan, Spooler chop etish xizmatini qayta ishga tushirmoqchisiz), quyidagi buyruqni bajarishingiz kerak:

Invoke-Buyruq -kompyuter nomi server1 -hisob ma'lumotlari domeni\foydalanuvchi1 -skript bloki (Qayta ishga tushirish-xizmat spuler)

Bu buyruq buyruqni bajaradi Qayta ishga tushirish-xizmat spoler nomli masofaviy kompyuterda server1. Hisob ma'lumotlari parametri foydalanuvchi domeni\user1 domenining xavfsizlik kontekstida buyruqni ishga tushirish uchun ishlatiladi.

Agar foydalanuvchi nomini ko'rsatsangiz, Windows PowerShell foydalanuvchi1 hisobi uchun parolni kiritishingizni so'rab muloqot oynasini ko'rsatadi. Keyin jingalak qavslarda ko'rsatilgan buyruq masofaviy kompyuterda bajariladi va natijalarni konsolga qaytaradi. Buyruq bajarilgandan so'ng, masofaviy PoSh sessiyasi tugaydi.

Vazifani fonda bajarish uchun siz -AsJob parametrini belgilashingiz mumkin.

Orqa fonda buyruqni ishga tushirganingizda, PowerShell natijalarini qaytarmaydi. Ularni qabul qilish uchun siz Receive-Job cmdletidan foydalanishingiz kerak.

Ishga kirish – id 3 |Qabul qilish-Ish

Faqat bitta buyruqni emas, balki butun PowerShell skriptini ishga tushirish uchun Invoke-Command cmdletida maxsus argument -FilePath mavjud bo'lib, u skript fayliga yo'lni belgilash uchun -ScriptBlock o'rniga ishlatilishi kerak. Misol uchun, men to'xtatilgan xizmatlar ro'yxatini ko'rsatadigan kichik PoSh skriptini yaratdim. Keling, ushbu skriptni masofaviy kompyuterda ishga tushiramiz:

Invoke-Buyruq -kompyuter nomi server1 -FilePath .\list.ps1

Bu erda shuni ta'kidlash kerakki, ps1 skript faylini masofaviy kompyuterga o'zingiz nusxalashingiz shart emas. Skriptni bajarish natijalari konsolga chiqariladi.

Ko'pincha bir nechta kompyuterlarda bir xil buyruq/skriptni bir vaqtning o'zida bajarishga ehtiyoj bor. Invoke-Command-dan foydalanish bu juda sodda tarzda amalga oshiriladi. Argumentda vergul bilan ajratilgan kompyuter nomlarini ko'rsatishingiz mumkin - Kompyuter nomi.

Invoke-Command -ScriptBlock (Qayta ishga tushirish-Service spoler) -ComputerName server1, server2, server3

Yoki uni massivga qo'ying:

$srv_list = @(″server4″,″server5″,″server6″)
Invoke-Command -ScriptBlock (Qayta ishga tushirish-Service spoler) -ComputerName $servers

Yoki sinov faylidan yuklang:

Invoke-Command -ScriptBlock (Qayta ishga tushirish-Service spoler) –ComputerName (Get-Content .\servers_list.txt)

Buyruq har bir kompyuterda bajariladi va uning bajarilishi natijalari konsolda ko'rsatiladi.

Eslatma. Invoke-Command cmdletida parametr mavjud Gaz chegarasi bir xil buyruq bir vaqtning o'zida bajarilishi mumkin bo'lgan kompyuterlarning maksimal sonini belgilash imkonini beradi. Odatiy bo'lib, raqam kompyuter tomonidan raqam bilan cheklangan 32 . Agar kerak bo'lsa, bu raqam ko'paytirilishi mumkin, lekin bu parametrni oshirish kompyuteringiz protsessoriga va xotirasiga yukni oshirishini unutmang, shuning uchun bu operatsiyani ehtiyotkorlik bilan bajarish kerak.

Agar o'rnatilgan bo'lsa, bir vaqtning o'zida AD dan tanlangan bir nechta kompyuterlarda quvurlar yordamida buyruqlarni bajarish mumkin bo'ladi:

Get-ADComputer -Filtr * -xususiyatlar nomi | tanlang (Name="computername";Expression=($_."name"))| Invoke-Command -ScriptBlock (xost nomi)

Har safar Invoke-Command ishga tushirilganda, protsessor vaqtini va resurslarini sarflaydigan yangi seans yaratiladi. Resurslarni isrof qilmaslik uchun barcha buyruqlarni bajarish uchun bitta seansdan foydalanishingiz mumkin. Masalan, kompyuter kompyuteri bilan yangi sessiya sessiyasini1 yaratamiz va uni $session o'zgaruvchisiga tayinlaymiz va keyin ushbu sessiyadagi vazifamizni bajaramiz:

$session = New-PSSession -ComputerName computer1 -Name seans1
Invoke-Command -ScriptBlock (Qayta ishga tushirish-xizmat to'xtatuvchisi) -Session $session

Ushbu seans siz PowerShell konsolini yopmaguningizcha faol qoladi. Shuningdek, siz sessiyani yopishingiz mumkin (Disconnect-PSSession) yoki uni o'chirishingiz mumkin (Remove-PSSession).

Powershell shunchalik ajoyibki, u nafaqat masofaviy kompyuterlarda ba'zi buyruqlarni bajarishga, balki kompyuterga to'liq ulanishga va buyruqlarni xuddi mahalliy kompyuterdagidek bajarishga imkon beradi. Odatiy bo'lib, bu zavq xavfsizlik sababli o'chirilgan. Uni yoqish va sozlash unchalik qiyin emas, lekin negadir ko'pchilik buni bilishmaydi.

Masofadan boshqarish uchun ikkita shart kerak bo'ladi: birinchidan, ikkala kompyuterda Powershell, .NET Framework va Windows masofaviy boshqaruv xizmati (2.0 va undan yuqori versiyadagi barcha komponentlar) o'rnatilgan bo'lishi kerak, ikkinchidan, ular masofadan boshqarish uchun sozlangan. Windows 7 va undan yuqori versiyalar uchun siz hech narsa o'rnatishingiz shart emas, Windows XP/2003 uchun hamma narsa allaqachon mavjud; .NET Framework va Powershell-ni o'rnatishingiz kerak (Windows Remote Management xizmati Powershell bilan birga keladi).

Barcha kerakli narsalar o'rnatilgandan so'ng, masofaviy ulanishga ruxsat berish uchun ulanishingiz kerak bo'lgan kompyuterni sozlashingiz kerak. Buning uchun winrm quickconfig yoki winrm qc buyrug'ini ishga tushirishingiz kerak. Bu buyruq bir vaqtning o'zida bir nechta ishlarni bajaradi:

  • WinRM xizmatini ishga tushiradi
  • WinRM xizmatining ishga tushirish turini avtomatikga o'zgartiradi
  • Har qanday IP manzildan so'rovlarni qabul qilish uchun tinglovchini yaratadi
  • WS-Management trafigi uchun xavfsizlik devori qoidalarini o'zgartiradi (faqat HTTP)

Bu vaqtda kompyuter masofaviy ulanishga tayyor deb aytishimiz mumkin, lekin amalda Enable-PSRemoting buyrug'ini ishga tushirish ham kerak bo'lishi mumkin.

Hammasi! Kompyuterni sozlash tugallandi va siz unga ulanishingiz mumkin. Endi qanday ulanish haqida bir necha so'z. Eng oson yo'li - bu cmdletdan foydalanish Kirish-PSSession , so'ng siz ulanmoqchi bo'lgan kompyuter nomini kiriting, masalan:

PSSession NameOfRemoteComputer-ni kiriting

Ushbu usul yordamida siz kompyuterlar domen a'zolari bo'lsa yoki masofaviy kompyuterda joriy foydalanuvchi bilan bir xil login va parolga ega "Administratorlar" guruhining a'zosi bo'lgan foydalanuvchi bo'lsa, ulanishingiz mumkin.

Aytgancha, sukut bo'yicha, faqat "Administratorlar" guruhining a'zolari masofaviy kompyuterga ulanishi mumkin (biz buni boshqa safar qanday tuzatish haqida gaplashamiz).

Ammo agar kompyuterlar domenda (yoki turli domenlarda) bo'lmasa va administrator loginlari va parollari boshqacha bo'lsa-chi?

Bunday holda, cmdlet Kirish-PSSession parametr bilan ishlatilishi kerak- Ishonchnoma , bu ulanish uchun kerakli hisob ma'lumotlarini kiritish imkonini beradi. Ammo kompyuteringizga ulanishdan oldin uni ishonchli xostlar ro'yxatiga qo'shishingiz kerak. Bu buyruq bilan amalga oshiriladi:

Set-element WSMan: \ localhost \ Client \ TrustedHosts - qiymat Kompyuter nomi

Bu erda Kompyuter nomi — biz ulanadigan kompyuter nomi. Siz ikkala kompyuter nomini ham, uning IP-manzilini ham belgilashingiz mumkin, ammo shuni yodda tutingki, bu erga kiritgan narsangiz keyinchalik ulanish uchun ishlatilishi kerak, ya'ni. Agar siz IP-manzilni ko'rsatsangiz, uning nomini ko'rsatib, kompyuterga ulana olmaysiz, IP-manzilni ko'rsatishingiz kerak bo'ladi va aksincha.