【问题标题】:How to get an environment variable in a Powershell script when it is deployed by SCCM?SCCM 部署时如何在 Powershell 脚本中获取环境变量?
【发布时间】:2017-02-23 20:09:31
【问题描述】:

我制作了一个脚本来自动更改和/或创建我公司所有员工的默认 Outlook 签名。

从技术上讲,它获取部署脚本的环境变量用户名,访问人员数据库以获取有关此用户的一些信息,然后通过替换链接的 docx 模板中的值来创建 3 个不同的签名文件。非常简单和合乎逻辑。

经过不同的测试,当您直接在计算机上启动脚本时,它可以正常工作,无论是使用 Powershell ISE、直接通过 CMD 还是在 Visual Studio 中。但是当我们尝试使用 SCCM 部署它时,它无法获取任何环境变量。

你们中有人知道如何在 SCCM 部署脚本时获取环境变量吗?

这是我已经尝试过的:

$Name = [Environment]::UserName

$EnvVarUserName = Get-Item Env:\USERNAME

即使是这样的东西:

$proc = gwmi win32_process -Filter "Name = 'explorer.exe'"
$report = @()
ForEach ($p in $proc)
{
    $temp = "" | Select User
    $temp.user = ($p.GetOwner()).User
    $report += $temp
}

提前致谢,祝大家有个愉快的一天!

[编辑]:

我找到了一种方法,虽然不是最好的,但它确实有效。我得到机器的名称,检查当笔记本电脑连接到我们的网络时它存储用户 ID 和机器的数据库,然后在员工数据库中获取信息。

我仍然会检查马特的想法,这个想法非常有趣,并且在某种程度上更准确。

谢谢大家!

【问题讨论】:

  • 我以前从未见过。我一直使用$Env:AppData 成功地使用 SCCM 部署的脚本安装东西。在最坏的情况下,您可以从中解析出用户名。但我怀疑这里还有其他事情发生。

标签: powershell environment-variables sccm


【解决方案1】:

你如何调用环境变量? $Env:computername之前在通过 SCCM 推出的脚本中为我工作过。

【讨论】:

  • $Name = [Environment]::UserName Write-Output "[Environment]::UserName ---> $Name" $EnvVarUserName = Get-Item Env:\USERNAME Write-Output "Get-项目 Env:\USERNAME ---> "$EnvVarUserName.Value $proc = gwmi win32_process -Filter "Name = 'explorer.exe'" $report = @() ForEach ($p in $proc) { $temp = "" |选择用户 $temp.user = ($p.GetOwner()).User $report += $temp } 写入输出 "temp.user ---> " $temp.User
【解决方案2】:

为什么不枚举“%SystemDrive%\Users”文件夹,排除某些内置账户,一次性处理完?

要使用 UserName 环境变量,脚本必须以登录用户身份运行,这也意味着您的所有用户至少对您的员工数据库具有读取权限,至少在我们的环境中,这将是一个很大的禁忌。

【讨论】:

  • 这其实是个好主意!我将在我们的安全性下寻找一种方法来做到这一点......确切地说,大禁忌......但如果我需要用户名,它只是用于查询中的过滤器。数据库访问由连接字符串管理。
猜你喜欢
  • 2018-09-16
  • 2021-08-01
  • 2017-02-22
  • 1970-01-01
  • 1970-01-01
  • 2018-12-31
  • 1970-01-01
  • 2013-08-25
  • 1970-01-01
相关资源
最近更新 更多