ICACLS no script do powershell 50% funcionando

2

Eu tenho um comando ICACLS em execução em um script PowerShell. O script cria uma nova pasta em um compartilhamento de servidor, cria um novo grupo de segurança no AD e, em seguida, executa o ICACLS para provisionar a pasta. Quando executo a função, às vezes funciona e às vezes não. No teste, apenas 50% das vezes o comando ICACLS funciona com sucesso.

New-ADGroup -Name "Group Name" -GroupCategory Security -GroupScope Global -SamAccountName "Group Name" -Description "Security Group" -Path "OU=Accounts,DC=Contoso,DC=COM"
New-Item -Path "\Server1\ServerShare\" -Name "Group Share" -ItemType directory
icacls "\Server1\ServerShare\Group Share" /Inheritance:r /T /Grant:R "Group Name"

icacls : Group Name: No mapping between account names and security IDs was done. + CategoryInfo :NotSpecified: (Group Name...y IDs was done. :String) [], RemoteException + FullyQualifiedErrorID : NativeCommandError

    
por Sid 01.01.2016 / 22:38

2 respostas

0

Codifiquei o script para procurar um erro e agir. Eu armazeno os resultados do comando ICACLS em $ Results. Se $ Results for um erro, ele exibirá a mensagem Write-Host "Pausando 5 segundos para replicação do AD" e tentará o comando novamente. Obrigado pela dica @ Ryan.

Eu tentei mascarar o "Nenhum Mapeamento entre nomes de contas e IDs de segurança foi feito." mensagem de erro vermelha com uma construção Try / Catch, mas sem sorte. Eu assumo que o Try / Catch não funciona porque é um comando do DOS. No entanto, o script continua assim que a replicação é concluída. Eu poderia aumentar o tempo de espera para 10 segundos e diminuir o número de mensagens de erro que o script exibe. Não quero que o administrador pense que algo está errado e, geralmente, mensagens de erro vermelhas significam exatamente isso.

Do
{
     $Results = icacls "\Server1\ServerShare\Group Share" /Inheritance:r /T /Grant:R "Group Name"
     If ($Results -eq 'Successfully processed 0 files; Failed processing 1 files')
     {
          # We just saw a RED ERROR message.
          Write-Host "Pausing 5 seconds for AD replication"
          Start-Sleep 5
     }
} While ($Results -eq 'Successfully processed 0 files; Failed processing 1 files'}
    
por 03.01.2016 / 14:45
0

O uso de ICACLS explica como usar o SID, mas pode ser melhor ... O final do uso mostra um exemplo que NÃO funciona. A seção / GRANT mostra a maneira correta de trabalhar. Você também precisa tomar cuidado com o Powershell, pois os argumentos ICACLS incluem asteriscos, dois-pontos e parênteses que CMD manipula sem problema, mas o Powershell trata de maneira diferente, portanto, é necessário evitá-los com backticks para passá-los para o EXE.

$sid = (get-adgroup "group name").sid.value
$sid
S-1-5-21-444444444-5555555555-666666666-77777
icacls "c:\temp\sid" /Inheritance:r /T /Grant:R '*$sid':'(R')
processed file: c:\temp\sid
Successfully processed 1 files; Failed processing 0 files
    
por 04.01.2016 / 16:15