如何在Win+R运行框中执行PowerShell DNS记录执行代码?
PowerShell代码在Win+R运行框中执行的正确写法
问题背景
我有一段PowerShell代码,用于从我的网站下载并合并DNS TXT记录后执行,这段代码在PowerShell控制台中可以正常运行,但始终无法在Win+R运行框中有效执行。
控制台可运行的完整版代码:
1..3|%{$p+=Resolve-DnsName "$_.website.com." -Ty TXT -EA 0|% S*s};& ([scriptblock]::Create($p))
简化版的运行差异
我还有一个简化版代码,仅拉取单条DNS TXT记录并执行,控制台中的写法是:
powershell . (nslookup -q=txt example.website.com)[-1]
但要在Win+R运行框中执行,必须修改为:
powershell "powershell . (nslookup -q=txt sub.website.com)[-1]"
完整版的执行困境
我尝试了约20种变体修改完整版代码,比如下面这种写法就会报错:
powershell .(1..3|%{$p+=Resolve-DnsName "$_.website.com." -Ty TXT -EA 0|% S*s};& ([scriptblock]::Create($p)))
解决方案
要让完整版代码在Win+R运行框中正常执行,核心是正确转义特殊字符并通过-Command参数传递代码字符串,正确写法如下:
powershell -c "`$p=''; 1..3|%{`$p+=Resolve-DnsName `"`$_.website.com.`" -Type TXT -ErrorAction SilentlyContinue|% Strings}; & ([scriptblock]::Create(`$p))"
关键修改点
- 使用
-c(即-Command)显式指定要执行的命令,这是Win+R环境下调用PowerShell的标准方式 - 对变量(
$p、$_)和双引号进行转义:Win+R基于cmd环境,PowerShell变量前需加反引号`,双引号也要用反引号转义 - 提前初始化
$p为空字符串,避免未定义变量导致的异常 - 将简写参数
-Ty改为全称-Type、-EA 0改为-ErrorAction SilentlyContinue,提升代码可读性(非强制,但推荐)
内容的提问来源于stack exchange,提问作者I am Jakoby
相关产品推荐
相关产品推荐

