web-dev-qa-db-ja.com

PowerShellスクリプトでicacls変数が機能しない

Nanoserver2016データセンターエディションで実行されている新しいファイルサーバーを構成しています。現在、ユーザーフォルダーを作成するための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に正しく設定されています。

2
Gerald

文字列内の変数を展開するには、一重引用符ではなく二重引用符を使用します。

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