Импорт Powershell из каталога приложений - PullRequest
0 голосов
/ 22 апреля 2020

Я работаю над несколькими инструментами, которые помогут моим техническим специалистам в удаленном развертывании программного обеспечения в центре программного обеспечения. Эта часть работает. Что я пытаюсь выяснить, так это то, что программное обеспечение активно не рекламируется на машине. Существует инструмент под названием 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
...