You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PowerShell中通过NET USE命令传递密码变量

问题原因与修改方案

问题出在你用单引号包裹cmd /c的命令字符串——PowerShell中,单引号内的变量不会被解析,$pass会被当作字面量传给net use,而非实际的密码值。

修改方法一:替换为双引号解析变量

把包裹命令的单引号改成双引号,让PowerShell自动替换$pass为实际密码:

#Authenitcate to NAS
$encrypted = Get-Content "C:\Scripts\password.txt" | ConvertTo-SecureString;
$credential = New-Object System.Management.Automation.PSCredential("username", $encrypted);
$pass = $credential.GetNetworkCredential().password;

cmd /c "net use \\MyServer\backups /delete /y >nul 2>&1"
cmd /c "net use \\MyServer\backups /user:username $pass /persistent:no >nul 2>&1"

修改方法二:用字符串格式化避免特殊字符问题

如果密码包含&、$这类特殊符号,双引号可能会引发解析错误,推荐用PowerShell的字符串格式化语法:

#Authenitcate to NAS
$encrypted = Get-Content "C:\Scripts\password.txt" | ConvertTo-SecureString;
$credential = New-Object System.Management.Automation.PSCredential("username", $encrypted);
$pass = $credential.GetNetworkCredential().password;

cmd /c 'net use \\MyServer\backups /delete /y >nul 2>&1'
cmd /c ("net use \\MyServer\backups /user:username {0} /persistent:no >nul 2>&1" -f $pass)

更推荐的方案:用PowerShell原生命令替代net use

没必要调用cmd,直接用PowerShell的New-PSDrive和Remove-PSDrive,更安全也更符合PowerShell的使用习惯:

#Authenitcate to NAS
$encrypted = Get-Content "C:\Scripts\password.txt" | ConvertTo-SecureString;
$credential = New-Object System.Management.Automation.PSCredential("username", $encrypted);

# 静默删除现有映射(忽略不存在的错误)
Remove-PSDrive -Name NASBackup -ErrorAction SilentlyContinue
# 创建新映射,不持久化
New-PSDrive -Name NASBackup -PSProvider FileSystem -Root "\\MyServer\backups" -Credential $credential -Persist:$false

内容的提问来源于stack exchange,提问作者user3596617

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.01 23:12:27