PowerShell脚本在ISE中正常运行,在PowerShell中报字符串缺少终止符错误
问题分析与解决
错误原因
问题出在Here-String的结束引号上:你使用的结束标记是中文全角的‘@,而非英文半角的'@。PowerShell ISE对全角符号的兼容性更宽松,会自动将其识别为半角符号;但普通PowerShell控制台严格区分全角/半角字符,因此触发了“String Missing Terminator”错误。
修复后的脚本
Set-Itemproperty -path 'HKCU:\Control Panel\Cursors' -Name 'Arrow' -value 'C:\Windows\cursors\TKT_BLK.cur' $CSharpSig = @' [DllImport("user32.dll", EntryPoint = "SystemParametersInfo")] public static extern bool SystemParametersInfo( uint uiAction, uint uiParam, uint pvParam, uint fWinIni); '@ $CursorRefresh = Add-Type -MemberDefinition $CSharpSig -Name WinAPICall -Namespace SystemParamInfo –PassThru $CursorRefresh::SystemParametersInfo(0x0057,0,$null,0)
两者的差异说明
PowerShell ISE在处理文本输入时会做自动修正,比如将输入的全角引号转换为半角,或是忽略部分格式细节。而普通PowerShell控制台完全遵循语法规则解析,对字符的半角/全角、格式规范要求更严格,这类细节问题会直接触发语法错误。
内容的提问来源于stack exchange,提问作者Slowchaos
相关产品推荐
相关产品推荐

