Я работаю над несколькими инструментами, которые помогут моим техническим специалистам в удаленном развертывании программного обеспечения в центре программного обеспечения. Эта часть работает. Что я пытаюсь выяснить, так это то, что программное обеспечение активно не рекламируется на машине. Существует инструмент под названием Client Center для Configuration Manager, в котором есть «Импорт приложения из каталога», но я не уверен, как это работает на самом деле, и это не одобренный инструмент. У кого-нибудь есть идеи, как имитировать это в powershell?
Спасибо, что уделили время.
#Admin Elevation
if (-Not ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] 'Administrator')) {
if ([int](Get-CimInstance -Class Win32_OperatingSystem | Select-Object -ExpandProperty BuildNumber) -ge 6000) {
$CommandLine = "-File `"" + $MyInvocation.MyCommand.Path + "`" " + $MyInvocation.UnboundArguments
Start-Process -FilePath PowerShell.exe -Verb Runas -ArgumentList $CommandLine
Exit
}
}
#A few variables to set after admin
Clear-Variable -Name app* -Force
$hosts = "$($env:windir)\system32\Drivers\etc\hosts"
$hostscontent = Get-Content $hosts -ReadCount 0
$ip = Read-Host -Prompt 'Please enter users IP'
$hostname = Read-Host -Prompt 'Please enter users Hostname'
#Setting up Hosts File
add-content $hosts -value "$ip $hostname"
#Winrm Trust Setup
Set-Item wsman:\localhost\Client\TrustedHosts -value * -Force
Restart-Service WinRM
#Invoke/Install data
$sessionv = New-PSSession -ComputerName $hostname
$scriptblock = {
param ($appname,$apprevision,$appid)
$ccm = [wmiclass]"Root\CCM\ClientSDK:CCM_Application"
$ccm.Install($appid, $apprevision, $true, 0, ‘Normal’, $False)
}
#Getting list of software
Get-CimInstance -computername $hostname -Namespace root/ccm/ClientSDK -ClassName CCM_Application |
Select-Object name, id, revision, installstate, ismachinetarget |
ogv -PassThru |
ForEach-Object {$appname, $appid, $apprevision = $_.name, $_.id, $_.revision}
#Installing the application
Invoke-Command -Session $sessionv -Argu $appname,$apprevision,$appid -scriptblock $scriptblock
#Ending Session, Removing Hosts entry, and pausing
Remove-PSSession $sessionv
set-content $hosts -Value $hostscontent | select-object -First ($hostscontent.count-1)
Pause