我正在编写一个脚本来更改Windows服务器中的本地安全策略。当我在PowerShell提示符中自己运行这些命令时,它们可以正常工作。但是,当我运行脚本时,我收到"Unexpected token 'PasswordComplexity' in expression or statement."
错误。
问题似乎源于脚本似乎没有执行secedit
命令,因此get-content
行没有要编辑的文件。
为什么secedit
没有运行?我已经尝试将secedit
命令放在if
语句之外,但得到相同的结果。
if ($win_ver -match "Server"){
#export current secuirty policy
secedit /export /cfg c:\new.cfg
start-sleep -s 10
#Disable Password Complexity
((get-content c:\new.cfg) -replace (‘PasswordComplexity = 1′, ‘PasswordComplexity = 0′)) | Out-File c:\new.cfg
#Disable password expiration
((get-content c:\new.cfg) -replace (‘MaximumPasswordAge = 42′, ‘MaximumPasswordAge = -1′)) | Out-File c:\new.cfg
#disable minmum password length
((get-content c:\new.cfg) -replace (‘MinimumPasswordLength = 6′, ‘MinimumPasswordLength = 1′)) | Out-File c:\new.cfg
#import new security settings
secedit /configure /db $env:windir\security\new.sdb /cfg c:\new.cfg /areas SECURITYPOLICY
}
答案 0 :(得分:3)
PowerShell字符串文字必须用撇号'...'
包围:
'string'
或引号"..."
:
"string"
因此,您使用的‘
和′
字符无效且需要替换:
((get-content c:\new.cfg) -replace ('PasswordComplexity = 1', 'PasswordComplexity = 0')) | Out-File c:\new.cfg
另请注意,由撇号括起来的字符串文字不会扩展变量。换句话说,这个:
$var = 123
Write-Host "My number: $var"
将输出:
My number: 123
这样:
$var = 123
Write-Host 'My number: $var'
将输出:
My number: $var