fragen stichworte

icacls-Variable funktioniert nicht im Powershell-Skript

Ich konfiguriere einen neuen Dateiserver, der auf der nanoserver 2016 Datacenter Edition ausgeführt wird. Im Moment arbeite ich an einem Powershell-Skript, um Benutzerordner zu erstellen. Ich erhalte jedoch eine Fehlermeldung, wenn ich mit dem Befehl icacls Berechtigungen festlege.

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' 

Es wird jedoch der folgende Fehler ausgegeben:

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  

Wenn ich den Code anstelle der Variablen ($UD) in den Benutzernamen (MYDOMAIN\t.test) ändere, funktioniert das einwandfrei.

icacls e:\usernt\$user/T/C/grant 'MYDOMAIN\t.test:(OI)(CI)F' 

Auch wenn ich den Wert von $ UD überprüfe, ist er korrekt auf MYDOMAIN \ t.test

eingestellt

antworten

Um Variablen innerhalb einer Zeichenkette zu erweitern, verwenden Sie doppelte Anführungszeichen, nicht einzelne.

icacls e:\\usernt\\$user/T/C/grant "$UD:(OI)(CI)F"