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

时间:2019-05-03 09:51:50

标签: powershell sccm

环境:

  • 系统中心配置管理器1810
  • 工作站= Windows 10 1709 / Windows 7 SP1
  • 具有附加脚本的特殊应用程序可以完成任务

实现方式:

  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?

1 个答案:

答案 0 :(得分:0)

首先,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
}

感谢您的帮助^^