gpt4 book ai didi

powershell - 为什么 $env:username 和 [environment]::username 会返回不同的用户?

转载 作者:行者123 更新时间:2023-12-03 18:36:52 26 4
gpt4 key购买 nike

PowerShell的$env:username有什么区别和 [environment]::username为什么他们可能会返回不同的用户 ? (我知道还有其他方法可以获取当前用户)

一些背景:

我有一个 Azure Pipeline,它在发布目标上运行 PowerShell 脚本。管道代理配置为在特定服务帐户下运行。该 PowerShell 脚本的一部分使用 $env:username分配权限。但是,权限被分配给本地管理员帐户。如果我将脚本更改为使用 [environment]::username正确的服务帐户用户被授予权限。

最佳答案

$env:USERNAME ,虽然预定义以反射(reflect)当前用户的用户名,但它是一个读写环境变量,就像任何其他环境变量一样。

尽管这样做显然是不可取的,但诸如 $env:USERNAME = 'foo' 之类的声明也是如此。更改环境变量的值 USERNAME对于当前进程及其子进程。

这意味着 如果环境变量 USERNAME之前在同一个 session 或 PowerShell 的父进程中修改过,可能是通过明确指定的启动环境,它不再反射(reflect)真实的用户名 .

虽然我不知道为什么 USERNAME在 Azure Pipelines 的情况下,环境变量将与真实帐户不同,PowerShell 的 Start-Process 无意中设置了错误值的示例。 cmdlet 当给出 -UseNewEnvironment开关:由于 PowerShell Core 7.0.0-preview.5/Windows PowerShell v5.1 的错误,$env:USERNAME居然总是反射(reflect)SYSTEM , 与实际用户帐户无关 - 见 this GitHub issue .

相比之下, [Environment]::UserName 使用不同的方法获取当前用户的用户名,不依赖于$env:USERNAME的值。并始终反射(reflect)真实的用户名 [1]。

简而言之:只有 [Environment]::UserName可靠地反射(reflect)当前用户帐户的用户名。

[1] 来自 linked docs :“在 Windows 上,UserName 属性包含对 Windows GetUserName 函数的调用。用户的域帐户凭据的格式为用户的域名、\ 字符和用户名。使用 UserDomainName属性获取用户的域名,UserName 属性获取用户名。
在 Unix 平台上 UserName属性包含对 getpwuid_r 的调用功能。

关于powershell - 为什么 $env:username 和 [environment]::username 会返回不同的用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58565296/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com