Powershell

icacls 變數在 powershell 腳本中不起作用

  • June 26, 2018

我正在配置在 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)"

引用自:https://serverfault.com/questions/867477