Para expandir variáveis dentro de uma string, use aspas duplas e não as únicas.
icacls e:\usernt\$user /T /C /grant "$UD:(OI)(CI)F"
Estou configurando um novo servidor de arquivos em execução na edição de datacenter do nanoserver 2016. Agora eu estou trabalhando em um script PowerShell para criar pastas de usuários. Mas recebo um erro ao usar o comando icacls para definir permissões.
Enter-PSSession -Computername Test01 -Credential administrator
$Domain = "MYDOMAIN"
$user = Read-Host -Prompt 'Type in the username'
$UD = $Domain +"\"+ $user
E:\
mkdir e:\usernt\$user
mkdir e:\usernt\$user\temp
mkdir e:\usernt\$user\templates
mkdir e:\usernt\$user\lotus\notes
mkdir e:\usernt\$user\MyBar
copy c:\MyBar e:\usernt\$user\MyBar
New-SmbShare -Name $user$ -Path e:\usernt\$user
Grant-SmbShareAccess -Name $user$ -AccountName Everyone -AccessRight full
icacls e:\usernt\$user /T /C /grant '$UD:(OI)(CI)F'
Mas dá o seguinte erro:
icacls : $UD: No mapping between account names and security IDs was done.
At line:1 char:1
+ icacls e:\usernt\$user /T /C /grant '$UD:(OI)(CI)F'
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: ($UD: No mapping...y IDs was done.:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
Quando eu mudo o código para o nome de usuário ( MYDOMAIN\t.test
) ao invés da variável ( $UD
) ele funciona bem.
icacls e:\usernt\$user /T /C /grant 'MYDOMAIN\t.test:(OI)(CI)F'
Além disso, quando verifico o valor de $ UD, ele é definido corretamente como MYDOMAIN \ t.test
Variáveis dentro de aspas duplas são expandidas, mas dentro de aspas simples elas não são.
PS C:\> $var = "Tomato"
PS C:\> write-host '$var'
$var
PS C:\> write-host "$var"
Tomato
Leia mais em get-help about_Quoting_Rules
Ele funcionará se você modificar as aspas no comando ICACLS da seguinte forma:
icacls "e:\usernt\$user" /T /C /grant "$($UD):(OI)(CI)(F)"