icacls 变量在 powershell 脚本中不起作用

icacls 变量在 powershell 脚本中不起作用

我正在配置一个在 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

答案1

要扩展字符串内的变量,请使用双引号而不是单引号。

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

答案2

双引号内的变量会扩展,但单引号内的变量则不会扩展。

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)"

相关内容