Odmowa instalacji-WindowsFeature -ConfigurationFilePath ze ścieżki UNC

0

Mam tutaj szablon roli (plik XML), który utworzyłem, aby skonfigurować wiele serwerów IIS jednocześnie. Szablon znajduje się na udziale UNC, który ma dostęp do odczytu do tego samego konta użytkownika, na którym uruchamiam zdalną wersję PowerShell as. Tego konta używam również do RDP na tych serwerach. Jeśli uruchomię Install-WindowsFeature -ConfigurationFilePath \\path\to\RoleTemplate.xmlna dowolnym serwerze, działa dobrze. Ale uruchomienie tego w bloku skryptu z jednego serwera do wielu innych kończy się niepowodzeniem z powodu „Odmowa dostępu do ścieżki”.

Czy to uruchomienie tego polecenia nie jest obsługiwane z poziomu ScriptBlock?


Przykład skryptu

$servers = "abc123 abc456 abc789";

ForEach ($server in ([regex]::matches($servers, "abc\d+") | %{$_.value})){
   Invoke-Command -ComputerName $server -ArgumentList {param($server)} -ScriptBlock {

        # IIS Role Setup
        Install-WindowsFeature -ConfigurationFilePath \\path\to\RoleTemplate.xml

        # Other irrelevant commands...

   }
}

Jeśli po prostu uruchomię polecenie samodzielnie na tym serwerze, używając tych samych poświadczeń, zadziała. Jednak zdalne uruchomienie tej samej instrukcji powoduje:

Access to the path '\\path\to\RoleTemplate.xml' is denied.
    + CategoryInfo          : InvalidArgument: (\\path\to\...oleTemplate.xml:String) [Install-WindowsFeature], CmdletInvocationException
    + FullyQualifiedErrorId : Install_WindowsFeature_ConfigurationFile_Import_Exception,Microsoft.Windows.ServerManager.Commands.AddWindowsFeatureCommand
    + PSComputerName        : abc123
Crypton
źródło
Prawdopodobnie działa w innym kontekście bezpieczeństwa. Ten kontekst najwyraźniej nie ma dostępu do udziału.
Daniel B,
Co to za kontekst bezpieczeństwa? Jestem nowy w PS i staram się po prostu wszystko poskładać. Jak to ustawić lub przetestować, aby zobaczyć, co to jest?
Crypton
Wyjaśnij: ScriptBlock działa w kontekście bezpieczeństwa użytkownika, który ma uprawnienia dostępu do tego udziału.
Crypton

Odpowiedzi:

0

Po dodatkowym dochodzeniu postanowiłem zastosować obejście.

Obejściem tego problemu jest załadowanie konfiguracji roli xml do zmiennej, a następnie przekazanie tej zmiennej do Invoke-Commandkontekstu, zapisanie zmiennej do pliku tymczasowego, a następnie wykonanie Install-WindowsFeaturetego pliku. Nie idealne, ale wykonało zadanie.

$roleconfig = [System.IO.File]::ReadAllText("\\path\to\RoleTemplate.xml")

ForEach ($server in ([regex]::matches($servers, "abc\d+") | %{$_.value})){
   Invoke-Command -ComputerName $server -ArgumentList $roleconfig -EnableNetworkAccess -ScriptBlock {
        param($roleconfig)


        # IIS Role Setup
        [System.IO.File]::WriteAllText("C:\RoleTemplate.xml", $roleconfig)

        Install-WindowsFeature -ConfigurationFilePath C:\RoleTemplate.xml

        # Etc...
 }

}
Crypton
źródło