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.xml
na 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
źródło
Odpowiedzi:
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-Command
kontekstu, zapisanie zmiennej do pliku tymczasowego, a następnie wykonanieInstall-WindowsFeature
tego pliku. Nie idealne, ale wykonało zadanie.źródło