Install-WindowsFeature -ConfigurationFilePath do caminho UNC foi negado

0

Eu tenho um modelo de função aqui (arquivo XML) que criei para configurar vários servidores IIS de uma só vez. O modelo está em um compartilhamento UNC que possui acesso de Leitura para a mesma conta de usuário em que estou executando o powershell remoto como. Esta conta também estou usando para RDP para esses servidores. Se eu executar Install-WindowsFeature -ConfigurationFilePath \path\to\RoleTemplate.xml em qualquer servidor, ele funcionará bem. Mas executar isso no bloco de script de um dos servidores para muitos outros falha com 'Acesso ao caminho negado'.

Esta execução deste comando não é suportada a partir de um ScriptBlock?

Exemplo de script

$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...

   }
}

Se eu apenas executar o comando sozinho nesse servidor, usando as mesmas credenciais, ele funcionará. No entanto, a execução da mesma instrução remotamente desiste:

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
    
por Crypton 18.07.2016 / 20:07

1 resposta

0

Após algumas investigações adicionais, decidi usar uma solução alternativa.

A solução é carregar o xml de configuração de função em uma variável e, em seguida, passar essa variável para o contexto Invoke-Command , gravar a variável em um arquivo temporário e, em seguida, executar Install-WindowsFeature nesse arquivo. Não é o ideal, mas deu conta do recado.

$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...
 }

}
    
por 18.07.2016 / 23:50