Powershell中出现意外的令牌错误

时间:2014-08-11 15:19:52

标签: powershell

我正在编写一个脚本来更改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
}

1 个答案:

答案 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