Jak používat PowerShell k nastavení IIS na více serverech

PowerShell je skvělý nástroj pro správu všeho, co souvisí s Windows. Může však také udělat docela dost práce při konfiguraci Internetové informační služby (IIS) a bude ještě lepší, když ji můžete použít k hromadné konfiguraci serverů IIS.

Jak získáváte stále více zkušeností s návrhem/administrací systému, máte tendenci se ptát sami sebe: „Může mi to PowerShell usnadnit?“ Téměř vždy to začíná výukovým programem, který vám pouze pomůže lépe porozumět PowerShellu. S ohledem na úkol konfigurovat různé součásti IIS pro více serverů lze kroky rozdělit do logických kroků, což jsou v podstatě kroky, které musíte dokončit v grafickém uživatelském rozhraní na jediném serveru Windows. Pojďme si projít krátký seznam kroků, které vám pomohou začít a které můžete volitelně přidat pro další konfigurace:

Většina těchto kroků jsou jednoduchá kliknutí GUI, tak proč by to nemohlo být provedeno pomocí několika příkazů PowerShellu? Nebo ještě lépe, spustit seznam více vzdálených serverů pro provedení stejného úkolu? Většina kroků, které budou demonstrovány v tomto příspěvku, jsou úryvky kódu, které můžete vložit do své typické struktury PowerShellu. Můžete mít vlastní protokolování a položky jedinečné pro ladění skriptů PowerShellu. Pokud ne, můžete je snadno propojit, abyste mohli rychle provést to, co potřebujete pro své konfigurace IIS.

Několik věcí, které je třeba předem nastavit

Chcete-li začít, potřebujete několik proměnných. Pracovní seznam serverů ke konfiguraci a dostupná síťová složka, kde se nachází soubor certifikátu PFX:

$Servers = Get-Content -Path C:WebServers.txt

$CertFolder = '\FileServer01SharedCerts'

Tím se převezme seznam serverů ze souboru .txt a nastaví se umístění, kde bude importovaný certifikát nalezen.

Pokud to budete provozovat na více serverech, budete se nakonec chtít ujistit, že běžíte na serverech, které jsou online. Dalším použitím rutiny Test-Connection je ping na každý server alespoň jednou, abyste se ujistili, že je aktivní, než budete pokračovat. Pokud je server online, logika zkopíruje složku ze síťové sdílené složky obsahující certifikát do složky C:WindowsTemp na vzdáleném serveru. Tímto způsobem rutina Invoke-Command pro import certifikátu nenarazí na problémy s oprávněním při kopírování ze síťového umístění:

foreach ($Server in $Servers) {

if (Test-Connection -ComputerName $Server -Quiet -Count 1) {

Copy-Item -Path $CertFolder`

-Cíl \\$Server\C$\Windows\Temp\CertAssets `

-Rekurze -Síla

Write-Host „Aktiva úspěšně zkopírována!“

}

jinak {

Write-Host „$Server se zdá být offline!“

}

…kód ukázaný níže…

}

Všimněte si, že při spuštění je užitečné poskytnout konzoli zpětnou vazbu pomocí řádků Write-Host. Bylo by také hezké přidat do existujícího protokolu, pokud s ním zabalíte svůj skript. Nyní víme, které servery jsou online a mají aktiva zkopírovaná lokálně. Nyní jsme připraveni jít vpřed.

Importujte certifikát a vytvořte novou vazbu

Tato akce se provádí pomocí rutiny Invoke-Command, která tuto akci provádí lokálně na každém serveru. V závislosti na úrovni zabezpečení, kterou chcete implementovat, můžete provést několik věcí s heslem, které je vyžadováno pro import certifikátu PFX. Můžete jej uložit za chodu pomocí Get-Credential, nebo stačí zadat heslo jako prostý text vložený do příkazu použitého k importu. Navrhoval bych alespoň zabezpečit heslo pomocí Get-Credential, i když existuje spousta dalších způsobů, jak zde heslo bezpečně zadat. Pro získání hesla můžete použít:

$MyPwd = Get-Credential -UserName 'Enter password below' -Message 'Enter password below'

Tím se uloží heslo certifikátu, aniž byste museli mít heslo v prostém textu ve skriptu. Tuto lokální proměnnou předáme vzdálenému příkazu pomocí komponenty $Using:. Protože se příkaz Invoke-Command a jeho doprovodný blok skriptu provádějí v jiném rozsahu (lokálním na vzdáleném počítači), nezná žádné lokální proměnné definované mimo blok skriptu. To vám umožní předat jakékoli lokální proměnné vzdálené relaci a vhodně je použít.

Certifikát budeme importovat do úložiště certifikátů účtu osobního počítače (Můj).

Následující kód provádí tyto kroky:

  1. Spuštění procesu na vzdáleném serveru
  2. Importujte akci pomocí poskytnutého hesla z kroku Get-Credential
  3. Vytvořte vazbu https na portu 443.
  4. Přidání importovaného certifikátu do kotvy https

*Toto je stále v rámci smyčky foreach definované výše:

Invoke-Command -ComputerName $Server -ScriptBlock {

$SiteName = „Můj web“

Import-PfxCertificate -Password $Using:MyPwd.Password`

-CertStoreLocation Cert:\LocalMachine\My `

-Cesta k souboru C:\Windows\Temp\CertAssets\MyCert.pfx

Import-modul WebAdministration

New-WebBinding -Name $SiteName -IP „*“ -Port 443 -Protokol https

$SSLCert = Get-ChildItem -Cert Cert:\LocalMachine\My `

| Where-Object {$_.Subject.Contains(„CertFriendlyName“)}

$Binding = Get-WebBinding -Name $SiteName -Protokol „https“

$Binding.AddSslCertificate($SSLCert.GetCertHashString(), „Moje“)

Write-Host „Nastavení úspěšné dne: $env:COMPUTERNAME“

}

Kromě jakéhokoli výstupu, který vynutíte výstup do konzoly jako součást vašeho vlastního nastavení, bude existovat také výstup pro akci importu certifikátu poté, co byl úspěšně importován.

Je také dobré uklidit svůj nepořádek, takže přidejte pár řádků, abyste odstranili složku se soubory. pfx, který byl zkopírován do stroje. To bude uvnitř smyčky foreach, nejlépe blízko konce:

Remove-Item -Path "\\$Server\C$\Windows\temp\CertAssets"-Recurse -Force

Write-Host "Cleanup on $Server completed!"

Vyžadujte na svém webu protokol SSL

Tento další fragment příkazu bude použit při nasazení nasazení. Pokud chcete, aby byl vyžadován hned, stačí jej přidat ke zbytku výše uvedeného kódu a můžete začít. Můžete mít postupné zavádění, kde to možná budete chtít povolit na konkrétních serverech. V každém případě to vytvoříte, podstata práce bude v těchto několika řádcích:

Import-Module WebAdministration

Set-WebConfiguration -Umístění „Můj web“`

-Filter 'system.webserver/security/access' -Value "Ssl"

Všimněte si, že parametr -Location je název webu IIS, který vyžaduje SSL. To nyní vynutí všechna zabezpečená připojení k vaší nové kotvě s příslušným certifikátem. V grafickém rozhraní by to bylo ekvivalentní kliknutí na ikonu „Nastavení SSL“ ve Správci IIS pro váš konkrétní web a zaškrtnutí políčka „Vyžadovat SSL“:

Konfigurace možností protokolování služby IIS

Pokud spravujete flotilu serverů IIS, které jsou za nástrojem pro vyrovnávání zatížení, můžete využít informace, které nástroj pro vyrovnávání zatížení shromažďuje z příchozích připojení. Za předpokladu, že váš konkrétní nástroj pro vyrovnávání zatížení je nakonfigurován tak, aby zachycoval hodnotu X-Forwarded-For, můžete získat příchozí IP adresy všech příchozích připojení k vašim serverům IIS a zobrazit je ve známých protokolech IIS. To je zvláště užitečné, pokud jde o řešení problémů se sledováním připojení z určitých zdrojů, které mohly způsobit chyby na konkrétním serveru.

Proto IIS neshromažďuje hodnotu X-Forwarded-For. Je třeba ji nakonfigurovat jako vlastní hodnotu, aby ji služba IIS mohla zachytit a zaregistrovat. Existuje také způsob, jak to nastavit v GUI, ale tento příkaz můžete přidat do našeho aktuálního skriptu pro zajišťování, abyste jej měli na svém místě od začátku:

Add-WebConfigurationProperty -PSPath 'MACHINE/WEBROOT/APPHOST' `

-Filtrujte „system.applicationHost/sites/siteDefaults/logFile/customFields“`

-Jméno „.““.

-Value @{logFieldName='X-Forwarded-For';sourceName='X-Forwarded-For';sourceType='RequestHeader'}

Po dokončení můžete ověřit, že toto vlastní pole bylo přidáno do IIS na úrovni serveru otevřením Správce IIS a kliknutím na Můj server > Protokolování > Soubor protokolu: Vyberte pole…

Jakmile to uděláte, budete moci vidět IP adresy pro příchozí připojení k vašim serverům IIS v tradičních protokolech IIS.

Toto je jen několik příkladů nastavení, která můžete nakonfigurovat na serverech IIS. Čím více serverů spravujete a nastavujete stejným způsobem, tím více kliknutí ušetříte, což je vždy dobrá věc. Navrhuji vyzkoušet různé příkazy pro požadovaná nastavení na stejném serveru. Jakmile budete mít proces pro tento jeden server, lze jej opakovat na libovolném počtu serverů se strukturou uvedenou zde v tomto příspěvku.

To by mělo být více než dostatečné, abyste mohli začít šetřit čas a mít standardizovanější nasazení IIS ve vašem prostředí.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.