【问题标题】:PowerShell - Merge two variables into onePowerShell - 将两个变量合并为一个
【发布时间】:2021-10-19 16:09:25
【问题描述】:

我正在学习 PowerShell,所以请原谅(我确定是)一个简单的问题。

我习惯于编写 BATCH 脚本,如果我想合并 %USERDOMAIN% 和 %USERNAME% 我会:

set zFullUsername=%USERDOMAIN%\%USERNAME%
echo %zFullUsername%

如何在 PowerShell 中做同样的事情?

感谢您的宝贵时间。

【问题讨论】:

  • 你的意思是$fullUserName = "$env:USERDOMAIN\$env:USERNAME" 吗?

标签: powershell variables environment-variables


【解决方案1】:

在 PowerShell 中,您可以通过几种不同的方式访问环境变量。我推荐的方式是使用$env:VAR 变量来访问它们。

$user = $env:USERNAME
$domain = $env:USERDOMAIN

echo "$domain\$user"

注意:\ 不是 PowerShell 解析器中的转义字符,` 是。

类似于呈现echo 命令(echo 是Write-Output 顺便说一句的别名),您可以像这样创建用户名变量:

$fullUserName = "$domain\$user"

或者您可以直接从环境变量直接创建$fullUserName:

$fullUserName = "${env:USERDOMAIN}\${env:USERNAME}"

注意:当变量中包含非字母数字字符时,${} 序列会告诉 PowerShell,${} 之间的所有内容都是要扩展的变量名的一部分。

似乎$env:VAR 中的: 实际上是该规则的一个例外,因为
"Username: $env:USERNAME" 确实 正确呈现。所以上面的${}序列是可选的。


为避免在尝试将此答案应用于其他领域时产生混淆,如果您需要在字符串本身中插入对象 property 或其他表达式的值,则可以使用子表达式而是在字符串中,即$() 序列:

$someVar = "Name: $($someObject.Name)"

当使用${} 或$() 时,不允许空格填充外部{} 或()。

【讨论】:

  • 现在看起来很明显。我非常感谢您提供的详细信息。有助于理解方法,而不仅仅是复制和粘贴您的答案。我在其他代码的命令行中使用过,效果很好。
【解决方案2】:

在受支持的操作系统上,我什至不会为此烦恼环境变量:

$zFullUsername = whoami

然后根据需要访问它:

$zFullUsername

【讨论】:

  • 正如您所说,只要 PC 上存在“whoami”,它就可以工作。如果是,我将在 WinRE 和 WinPE 中进行测试。我想您可以通过检查“whoami.exe”是否存在以及其他答案作为后备来使用您的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-28
  • 2020-08-30
  • 1970-01-01
  • 1970-01-01
  • 2014-04-15
相关资源
最近更新 更多