在需要它的计算机上推送许可证文件

Push licence file on computer who need it

环境:

实现方式:

  1. 未经许可部署包
  2. 推送许可文件

    1. 停止服务
    2. 使用 SCCM 大头钉阅读许可证并在必要时推送它
    3. 开始服务

数以百计的计算机受到影响,编辑没有提交指南来完成它而不重新启动计算机而不提示最终用户。

我们正在使用 SCCM 来部署和检查包(WMI 查询、注册表等)。我们可以使用,powershell to query more objects,比如读取许可证文件来检查它是否是好的。

阅读许可是这样完成的:

if ((Get-Content "C:\Program Files\XXX\X.LIC") -contains serial_no=XXXXX")) {
    Write-Host "License OK"
}

如果许可证不是很好,则会在工作站上启动一点(在某个文件夹中,例如 C:\Windows\CCMCACHE\a) 喜欢

If (Test-Path ("C:\Program Files (x86)\NetSupport\NetSupport School"))
{
    If (Test-Path ("C:\Program Files (x86)\XXX\X.LIC"))
    {
        Rename-Item -Path "C:\Program Files (x86)\XXX\X.LIC" -NewName  ("X.LIC." + (Get-Date).ToString("yyyyMMdd")) -Force
    }
    Copy-Item -Source $PSScriptRoot\X.LIC -Destination ("C:\Program Files (x86)\XXX") -Force
}
ElseIf(Test-Path ("C:\Program Files\XXX"))
{
    If (Test-Path ("C:\Program Files\XXX\X.LIC"))
    {
        Rename-Item -Path "C:\Program Files\XXX\X.LIC" -NewName  ("X.LIC." + (Get-Date).ToString("yyyyMMdd")) -Force
    }
    Copy-Item -Source $PSScriptRoot\X.LIC -Destination ("C:\Program Files\XXX") -Force
}

我需要 PowerShell v3 吗?我怎样才能用 PSv2 做到这一点?

首先,Copy-Item 是错误的 -> -Path 而不是 -Source

并且,在 Windows PowerShell 2.0 中,$PSScriptroot 仅在脚本模块 (.psm1) 中有效。从 Windows PowerShell 3.0 开始,它在所有脚本中都有效。

所以,我是这样做的:

$scriptpath = split-path -parent $MyInvocation.MyCommand.Definition
If (Test-Path ("C:\Program Files (x86)\XXX"))
{
    If (Test-Path ("C:\Program Files (x86)\XXX\X.LIC"))
    {
        Rename-Item -Path "C:\Program Files (x86)\XXX\X.LIC" -NewName  ("NSM.LIC." + (Get-Date).ToString("yyyyMMdd")) -Force
    }
    Copy-Item -Path ($scriptpath + "\X.LIC") -Destination ("C:\Program Files (x86)\XXX") -Force
}
ElseIf(Test-Path ("C:\Program Files\XXX"))
{
    If (Test-Path ("C:\Program Files\XXX\X.LIC"))
    {
        Rename-Item -Path "C:\Program Files\XXX\X.LIC" -NewName  ("X.LIC." + (Get-Date).ToString("yyyyMMdd")) -Force
    }
    Copy-Item -Path ($scriptpath + "\X.LIC") -Destination ("C:\Program Files\XXX") -Force
}

感谢您的帮助^^