Я настраиваю новый файловый сервер, работающий на версии центра обработки данных nanoserver 2016. Прямо сейчас я работаю над сценарием PowerShell для создания пользовательских папок. Но я получаю сообщение об ошибке при использовании команды icacls для установки разрешений.
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'
Но это дает следующую ошибку:
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
Когда я меняю код на имя пользователя (MYDOMAIN\t.test
) вместо переменной ($UD
) работает нормально.
icacls e:\usernt\$user /T /C /grant 'MYDOMAIN\t.test:(OI)(CI)F'
Также, когда я проверяю значение $ UD, оно правильно установлено на MYDOMAIN \ t.test
Чтобы раскрыть переменные внутри строки, используйте двойные кавычки, а не одиночные.
icacls e:\usernt\$user /T /C /grant "$UD:(OI)(CI)F"
Переменные в двойных кавычках раскрываются, а в одинарных - нет.
PS C:\> $var = "Tomato"
PS C:\> write-host '$var'
$var
PS C:\> write-host "$var"
Tomato
Узнать больше на get-help about_Quoting_Rules
Он будет работать, если вы измените кавычки в команде ICACLS следующим образом:
icacls "e:\usernt\$user" /T /C /grant "$($UD):(OI)(CI)(F)"