Přejít k obsahu webu
4.3.2020 / kaldy123

IIS Virtual Directory na core serveru.

Core IIS server sice lze pohodlně spravovat z remote IIS konzoly, nicméně, ale pokud máte virtuálních adresářů povícero a navíc, pokud máte farmu IIS serverů – je to k uklikání.
Dobře, máme powershell, ale ouha! Pokud se podíváte na parametry New-WebVirtualDirectory,  je zřejmé, že máme problém se zadáním pověření (credentials). A to může být docela problém, zejména, pokud máte virtuální adresáře na sdílených adresářích (shares).

New-WebVirtualDirectory [-Site <String>] [-Application <String>] [-Name] <String> [-PhysicalPath <String>] [-Force] [<CommonParameters>]

V tomto příspěvku uvádím tedy nástin PS příkazů, jak co nejvíce zautomatizovat řešení popsaného problému.

Zavedení modulu WebAdministration.

Abychom mohli s IIS dobře pracovat, zavedeme tento modul. Jeho nepřítomnost například zjistíme velmi rychle absencí PoverShell drive provideru IIS: .

Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

Try the new cross-platform PowerShell https://aka.ms/pscore6

PS C:\WINDOWS\system32> Import-Module WebAdministration
PS C:\WINDOWS\system32>

Vytvoření virtuálních adresářů

Pro jednoduchost uvádím 3 servery, na kterých máme share szar. Virtuální adresář bude mít vždy jméno serveru a bude ukazovat do zmíněného share.

PS C:\>
PS C:\> $servery='server1','server2','server3'
PS C:\> $servery|% {New-WebVirtualDirectory -site status.domena.cz -Name $_ -PhysicalPath ('\\' + $_ +'.domena.cz\szar') -force}

Name    PhysicalPath
----    ------------
server1 \\server1.domena.cz\szar
server2 \\server2.domena.cz\szar
server3 \\server3.domena.cz\szar

Použití parametru -force je na tomto místě docela kruciální. Příkaz se snaží po zadání validovat zadanou cestu, nicméně pracuje v lokálním kontextu a jaxi se mu to nepovede. Zadání pověření (credentials) v tomto kroku není možné – takže je potřebné validaci parametru nějako obejít. Parametr -force vynutí založení adreáře, i kdzž cesta je neplatná.

Doplnění credentials.

Toto provedeme nastavením vlastností na Power Shell drivu IIS: . Protože nemáme specializované parametry pro položku virtuálního adresáře, řešíme toto konstruktem, kdy zadáváme dvojici jmého_vlastnosti – hodnota_vlastnosti. Protože virtuální adresáře mají v tomto příkladě jména shodná se servery, do kterých ukazují, jedním příkazem nastavíme pro všechny 3 adresáře uživatelské jméno a druhým pro všechny 3 adresáře heslo. Jméno: potřebujeme doménového uživatele, anžto lezeme na sdílené adresáře v síti. Heslo se zadává kupodivu v otevřeném textu, ale v systému se ukládá šifrovaně.
(Soubor ApplicationHost.config)

PS C:\> $servery|% {Set-ItemProperty -Path ('iis:\sites\status.domena.cz\' + $_) -Name userName -Value domena\bfu}
PS C:\> $servery|% {Set-ItemProperty -Path ('iis:\sites\status.domena.cz\' + $_) -Name password -Value Pa55w.rd}

Právě fakt, že hesla jsou v systému uložená šifrovaně, zcela znemožňuje replikaci definic virtuáních adresářů prostou editací souboru ApplicationHost.config. Za zkušenost zaplatíte restartem webového serveru, ve kterém musíte odstranit ony zkopírované řádky konfiguračného souboru. Pouhý restart nestačí: odpálí se tam nějaká služba, ale která – to jsem nezjistil.

Poznámka 1.

Celý tento postup byl laděn a zkoušen na Microsoft Windows Serveru 2019.

Poznámka 2.

Někdy mám pocit, že některé týmy vývojářů na Microsoftu – jako by byly z jiné planety. Nechodí vám příkazy Set-ItemProperty tak, jak je popsáno v příkladu? Jasně: Set-It…. …password je v cajku, ale Set-It… …username vám nechodí a nechodí! Zkuste tedy jako jméno property userName – kapišto? Fakt. Jsme u Microsoftu a ono je to Case-Sensitive ! To je podobné jako u zadání hesla v otevřeném textu: v celém zbytku PowerShellu (pokud je mi známo) se používá formát hesla jako Secure.String …..

 

2.3.2020 / kaldy123

Export and Import Windows features

Když potřebuju ještě jeden server, stejný jako ten předchozí.

Create your windows features xml or text file with the one of the following commands from a reference server:

Get-WindowsFeature | ? { $_.Installed } | Export-Clixml .\Features.xml

OR

Get-WindowsFeature | ? { $_.Installed } | Select Name | ForEach-Object { $_.Name } | Out-File .\Features.txt

To install these features:

$(Import-Clixml .\Features.xml) | Add-WindowsFeature

OR

$(Get-Content .\Features.txt) | Add-WindowsFeature

I prefer the TXT file and a Sort for an easy way to compare the files to easily compare of two servers. Therefore my final scripts:
Export:

Import-Module ServerManager
Get-WindowsFeature |
? { $_.Installed } |
Sort-Object Name |
Select Name |
ForEach-Object { $_.Name } |
Out-File .\Features.txt

Import:

Import-Module ServerManager
$(Get-Content .\Features.txt) |
Add-WindowsFeature

..and you should be all set.
http://jeffmurr.com/blog/?p=273

Poznámka: Když jsem popsaný způsob aplikoval, nedařila se mi ta textová varianta. Po delším pátrání (to už jsem byl dávno za vodou s xml formátem) mi došlo, že při získávání features mi vypadl příkaz

ForEach-Object {$_.name}

Jasně! Právě tento příkaz „vykotlá“ z objektu Feature právě Property Name a tu teprve zapisuje. A je jasné, proč mi to nechodilo, i když výpis Features.txt vypadal dobře (ale byly tam trailing mezery – a ty na výpisu vidět nejsou)!

26.1.2020 / kaldy123

SQL (Express) na Core serveru II.

Nastavení.
Podstatou úkolu je nastavit SQL server pro vzdálenou správu, nejlépe přes SQL system management studio – SSMS. K tomu je nutné povolit TCP komunikaci a v případě „named instance“ (pojmenované instance) – nastavit i pevný port.

Celý postup (v powershell) je trochu krkolomný. ale jde to:

  1. nastavení SQL Management Objektu
  2. vytvoření Windows Management Instrumentation objektu
  3. připojení (vytvoření) k objektu TCP pro danou instanci SQL serveru v rámci WMI objektu
  4. povolení TCP komunikace
  5. nastavení pevného portu pro komunikaci

Níže uvedené příkazy se zadávají v prostředí SQLPS – powershell pro SQL server. Zavoláte jednoduše z příkazové řádky příkazem sqlps. Jak na něj přes remoting – věru nevím, příklad byl vyzkoušen na lokální konzole.
V příkazech:

$smo='Microsoft.SqlServer.Management.Smo.'
$wmi=new-object ($smo + 'Wmi.ManagedComputer')
$uri="ManagedComputer[@Name='JMENO-SERVERU']/ServerInstance[@Name='SQLEXPRESS']/ServerProtocol[@Name='Tcp']"
$Tcp=$wmi.GetSmoObject($uri)
$Tcp.IsEnabled=$true
$Tcp.Alter()
$wmi.GetSmoObject($uri + "/IPAddress[@Name='IPAll']").IPAddressProperties[1].Value="1433"
$Tcp.Alter()

K tomu jen pár praxí získaných poznámek:

  1. JMENO-SERVERU je skutečně nutno psát verzálkama (velkými písmeny) – ta mrcha je case-sensitive!
  2. Parametry @Name jsou rovněž case-sensitivní.
  3. Parametr IPAll není IPA-jedenáct, ale IP-všechny!
  4. Tcp.Alter je tam 2x a záměrně. Totiž: nejdříve je třeba objekt Tcp vytvořit – a pak můžete nastavovat fixní (nebo jiný) port

Příklad je zpracován pro named instance SQLEXPRESS a port 1433.

Nedaří se?
Pokud běží na virtuálce, je dobré mrknout, zda všechny servisy, co mají běžet, běží. Malý powershelový mustr je:

Get-Service|? {($_.starttype -eq 'Automatic') -and ($_.status -ne 'Running')}|ft name,status,starttype
25.1.2020 / kaldy123

SQL (Express) na core serveru I.

Instalace.

Instalovat jde, ale není podporovaný wizzard, musí se instalovat z příkazové řádky v quiet módu. Je dobré si vypsat setup /? a projet si parametry. Osobně jsem svůj SQLEXPRESS instaloval takto:

C:\setup /ACTION=INSTALL /FEATURES=SQL /IACCEPTSQLSERVERLICENSETERMS /INSTANCENAME=SQLEXPRESS /SAPWD=<HESLO> /SECURITYMODE=SQL /SQLBACKUPDIR="C:\SQLBACKUP" /SQLCOLLATION=SQL_Czech_CP1250_CI_AS /TCPENABLED=1 /QS
22.1.2020 / kaldy123

OTEVŘENÉ DNSSEC VALIDUJÍCÍ RESOLVERY

JAK ZAPNOUT CZ.NIC RESOLVERY?
V konfiguraci síťového připojení nakonfigurujte resolvery s IP adresami

193.17.47.1

185.43.135.1

pokud vaše síťové připojení funguje i přes protokol IPv6 můžete použít i IPv6 adresy 2001:148f:ffff::1 a 2001:148f:fffe::1.

Zkopírováno z https://www.nic.cz/odvr/

13.1.2020 / kaldy123

CRL na IIS

Je dost důvodů, proč vystrčit CDP (CRL Distribution Point) na nějaký externí webový server. Má to drobný háček: Delta CRL má na konci názvu „+“ – a to se IIS pranic nelíbí. Pokud s tím nic neuděláte, dostanete 403 – not found.

Chce to povolit v Request filtering – Allow double escaping. Jinak, kompletní článek je na https://www.vkernel.ro/blog/how-to-publish-the-crl-and-aia-on-a-separate-web-server .

How to Publish the CRL and AIA on a Separate Web Server
In order to fix this and make it more flexible, we are going to publish the AIA and CRLs on a different server, a web server. And since we are in Microsofts world, we are going to use IIS as our new location or distribution point.
http://www.vkernel.ro

Zde publikuji pouze sručný tahák:

13.1.2020 / kaldy123

CA decomission

https://support.microsoft.com/en-ca/help/889250/how-to-decommission-a-windows-enterprise-certification-authority-and-r

How to decommission a Windows enterprise certification authority and remove all related objects
When you uninstall a certification authority (CA), the certificates that were issued by the CA are typically still outstanding. If the outstanding certificates are processed by the various Public Key Infrastructure client computers, validation will fail, and those certificates will not be used.
support.microsoft.com

CA-Decomision.pdf