环境:
实现方式:
推送许可证文件
数以百计的计算机受到影响,并且编辑器没有提交准则,而无需重启计算机而不提示最终用户。
我们正在使用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?
答案 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
}
感谢您的帮助^^