是什么PowerShell的之间的区别$env:username,并[environment]::username和他们为什么要返回的潜在用户不同?(我知道还有其他方法可以吸引当前用户)
一些背景:
我有一个Azure管道,在发布目标上运行PowerShell脚本。管道代理配置为在特定服务帐户下运行。该PowerShell脚本的一部分用于$env:username分配权限。但是,权限将分配给本地管理员帐户。如果我更改脚本以使用[environment]::username正确的服务帐户,则将为用户授予权限。
$env:USERNAME,虽然预定义以反映当前用户的用户名,但它是一个读写环境变量,与其他变量一样。
即使这样做显然是不明智的,也可以使用如下语句来$env:USERNAME = 'foo'更改USERNAME当前进程及其子进程的环境变量的值。
这意味着,如果USERNAME较早在同一会话或PowerShell的父进程中修改了环境变量(可能是通过显式指定的启动环境),则它不再反映真实的username。
虽然我不知道为什么在USERNAMEAzure Pipelines中环境变量为什么会与真实帐户有所不同,但Start-Process在进行-UseNewEnvironment切换时,PowerShell的cmdlet 的示例-无意-设置错误的值:由于PowerShell Core 7.0中的错误.0-preview.5 / Windows PowerShell v5.1 $env:USERNAME意外地总是反映出来SYSTEM,而不考虑实际的用户帐户-请参阅此GitHub问题。
相反,[Environment]::UserName使用不同的方法来获取当前用户的用户名,该方法不依赖的值,$env:USERNAME并且始终反映真实的用户名[1]。
简而言之:仅[Environment]::UserName可靠地反映当前用户帐户的用户名。
[1]从链接的文档中:“在Windows上,该UserName属性包装对Windows GetUserName函数的调用。用户的域帐户凭据的格式设置为用户的域名,\字符和用户名。使用该UserDomainName属性可获取用户的域名和UserName用于获取用户名
的UserName属性。在Unix平台上,该属性包装对该getpwuid_r函数的调用。
| 归档时间: |
|
| 查看次数: |
71 次 |
| 最近记录: |