Blog

PowerShell ile SCCM için Paket Hazırlama

İlk yazıda uygulama ve paket hazırlamak için genel bilgileri paylaşmıştık. Daha sonra MSI, EXE, CMD ve PS Betik dosyaları kullanarak birer uygulama hazırlamıştık, bu yazıda da bir adet Paket hazırlayacağız.

Paket / Package” ve “Uygulama / Application” arasındaki farkları kabaca şöyle sıralayabiliriz:

Bir paketi, sadece dosyaları v.b. kullanmak için hazırlayabilirsiniz, içerisine kurulum ve kaldırma işlemleri için “Program” eklemek zorunda değilsiniz. Bu şekilde, örneğin kullanmak istediğiniz betikleri, sürücüleri kopyalayarak, bunları “Görev Sıraları / Task Sequences” ile de kullanabilirsiniz.

Gerek olduğunda, kullanıcı yetkileri ile de çalışan, kurulum yapan bir program oluşturabilirsiniz.

Paket ile birden fazla farklı kurulum ve kaldırma seçeneklerini bulunan programlar yaparak, farklı koleksiyonlar için kullanabilirsiniz.

Uygulamada, tek bir “Dağıtım Tipi / Deployment Type” ile, hazırlanan “Yükleme / Install” komutu ya da  “Kaldırma / Uninstall” komutunu, kullanabilirsiniz. Pakette, bunu ayrı ayrı komutlar olarak hazırlamanız gerekir. Ayrı bir kurulum programı, ayrı bir uygulama kaldırma programı gibi.

Bilgisayar gibi kullanıcıya da uygulama dağıtabilirsiniz.

Önceki sürümü, yeni sürüm ile otomatik değiştirebilirsiniz (Yerini Alma / Supersedence).

Uygulamalarda biraz daha fazla seçeneklere sahip olabilirsiniz; yazılım ve donanım gereklilikleri kontrolü, hata kodları, bağımlılıklar, tahmini kurulum süresi gibi.

Gelelim paketi hazırlamaya. Uygulama da olduğu gibi Paket hazırlarken de değişkenler kullanılabilir, ek değişkenler için, kısa açıklamalar şu şekilde:

$Paket=”Paketin ismi”
$Program_kur=’Paket içindeki Programın Kurulum ismi’
$Program_kaldir=’Paket içindeki Programın Kaldırılma ismi’
$adm_Aciklama=”Paket açıklaması”
$adres=”Paketin bulunduğu klasörün sunucu adresi, örnek: \\sunucu_adiniz\Deployment\NSClient”
$simge=”Paketin bulunduğu klasörün sunucu adresi, örnek: \\sunucu_adiniz\Deployment\Simgeler\nscp.ico”
$firma=”Programın hazırlayan geliştirici”
$surum=”Program sürüm”
$dil=”Program dili” ### [ English | Turkish | …] #
$DiskAlani=’Programın bilgisayar üzerinde kapladığı alan’
$DiskAlaniBirim=”Kaplanan alanın birimi ” ### [ KB | MB | GB ]#
$sure=’Dakika cinsinden kurulum süresi’
$Adresturu=”dosyaların bulunduğu adresin tipi, ağ üzerinden ya da disk sürücü olarak ” ### [ RunWithUnc | RequiresDriveLetter | RequiresSpecificDriveLetter ]#
$ProgCalismaTipi=”Kullanıcı oturum açma durumu gerekliliği” ### [ OnlyWhenUserIsLoggedOn | WhetherOrNotUserIsLoggedOn | OnlyWhenNoUserIsLoggedOn ]#
$ProgYetkiTipi=”Kullanıcı yetkisi ile ya da yönetici yetkisi ile kurulum” ### [ RunWithUserRights | RunWithAdministrativeRights ]#
$CalismaTipi=”İşlemlerin Kullanıcıya görünüm durumu” ### [ Normal | Minimized | Maximized | Hidden ]#
$Komut_kur=”Kurma komutu”
$Komut_kaldir=”Program kaldırma komutu”
$yerel_aciklama=”Yazılım Merkezi / Software Centerda görünen açıklama (Cihaz/Device dağıtımlarında)”
$DagitimAmaci=”Kullanıcı yüklesin ya da doğrudan yüklensin” ### [ Available | Required ]#
$Koleksiyon = “Dağıtım için kullanılacak koleksiyon ismi”
$NeZaman=”Programı hemen ya da oturum açma ya da kapanma esnasında” ### [ AsSoon AsPossible | LogOn | LogOff ]#
$HizliAg=”Ağ hızı normal ise kurulum sunucu üzerinden ya da yerele kopyalanarak kurulma seçeneği” ### {RunProgramFrom    DistributionPoint | DownloadContentFromDistributionPointAndRunLocally}#
$YavasAg=”Ağ hızı yavaş ise kurmama ya da ağ üzerinden kurma” ### [ DoNotRunProgram | DownloadContentFromDistributionPointAndLocally | RunProgramFromDistributionPoint ]

Örnek paket için, popüler açık kaynak izleme aracı Nagios sunucusu için “Nagios İstemcisi” kullanılacaktır:

Önce değişkenleri oluşturalım:

$Paket=”NSClient – CMD – x64″
$Program_kur=$Paket+’_Kurulum’
$Program_kaldir=$Paket+’_Prog_Kaldir’
$adm_Aciklama=”Nagios İstemci”
$adres=”\\sunucu_adiniz\Deployment\NSClient”
$simge=”\\sunucu_adiniz\Deployment\Simgeler\nscp.ico”
$firma=”Michael Medin”
$surum=”0.5.2.41″
$dil=”English”
$DiskAlani=4
$DiskAlaniBirim=”MB” ### [ KB | MB | GB ]#
$sure=20
$Adresturu=”RunWithUnc” ### [ RunWithUnc | RequiresDriveLetter | RequiresSpecificDriveLetter ]#
$ProgCalismaTipi=”WhetherOrNotUserIsLoggedOn” ### [ OnlyWhenUserIsLoggedOn | WhetherOrNotUserIsLoggedOn | OnlyWhenNoUserIsLoggedOn ]#
$ProgYetkiTipi=”RunWithAdministrativeRights” ### [ RunWithUserRights | RunWithAdministrativeRights ]#
$CalismaTipi=”Hidden” ### [ Normal | Minimized | Maximized | Hidden ]#
$Komut_kur=”nscp_kur.cmd”
$Komut_kaldir=”nscp_kaldir.cmd”
$yerel_aciklama=”Nagios istemcisi”
$DagitimAmaci=”Required” ### [Available | Required ]#
$Koleksiyon = “Test_Kurulum”
$NeZaman=”AsSoonAsPossible” ### [ AsSoonAsPossible | LogOn | LogOff ]#
$HizliAg=”DownloadContentFromDistributionPointAndRunLocally” ### [ RunProgramFrom DistributionPoint | DownloadContentFromDistributionPointAndRunLocally ]#
$YavasAg=”DoNotRunProgram” ### [ DoNotRunProgram | DownloadContentFromDistributionPointAndLocally | RunProgramFromDistributionPoint ]

Daha önceki yazılarda, MSI, EXE v.b. uygulama hazırlarken olduğu gibi, değişkenleri komutlar ile burada da kullanabilirsiniz, alternatif bir yöntem olarak, komutları da kısaltabileceğiniz yeni bir yöntem kullanalım, yazının sonuna doğru önceki seçenek de verilecektir, her zaman olduğu gibi tercih yine sizin.

Değişkenlerin tamamını kopyala yapıştır ile yönetici yetkisi ile açtığınız, PS konsoluna yapıştırınız. Bu arada, “ConfigManager” modülü yüklü konsol nasıl açılır bilmiyorsanız, lütfen İlk yazıya göz atınız.
Yeni paket yapmak için gereken komut parametrelerini hazırlayalım: 

$YeniPaketParametreleri = @{       
‘Name’ = $Paket;       
‘Description’ = $adm_Aciklama;       
‘version’ = $surum;       
‘IconLocationFile’ = $simge;       
‘Manufacturer’ = $firma;       
‘Path’ = $adres;      
‘Language’ = $dil;   
}

Parametreleri de kopyala yapıştır ile, admin olarak açtığınız PS konsoluna aktarınız; ardından yeni paket oluşturma komutunu veriniz, konsola gelen bilgileri görmek isterseniz, “| Out-Null” komutunu kullanmayınız.

New-CMPackage @YeniPaketParametreleri | Out-Null

Ardından, paket içerisine, kurulum programı için parametreleri hazırlayalım:

$YeniProgramKurParametreleri = @{        
‘PackageName’ = $Paket;        
‘StandardProgramName’ = $Program_kur;        
‘DiskSpaceRequirement’ = $DiskAlani;                
‘DiskSpaceUnit’ = $DiskAlaniBirim;        
‘DriveMode’ = $Adresturu;        
‘Duration’ = $sure;        
‘ProgramRunType’ = $ProgCalismaTipi;        
‘RunMode’ = $ProgYetkiTipi;        
‘RunType’ = $CalismaTipi;        
‘CommandLine’ =  $Komut_kur;   
}

New-CMProgram @YeniProgramKurParametreleri | Out-Null

Program kaldırma seçeneğini de eklemek isterseniz, yukarıda ki parametrelerden değişen satırlar,  $başlık,
‘StandardProgramName’
ve
‘CommandLine’ :

$YeniProgramKaldirParametreleri = @{       
‘PackageName’ = $Paket;        
‘StandardProgramName’ = $Program_kaldir;        
‘DiskSpaceRequirement’ = $DiskAlani;                
‘DiskSpaceUnit’ = $DiskAlaniBirim;        
‘DriveMode’ = $Adresturu;        
‘Duration’ = $sure;        
‘ProgramRunType’ = $ProgCalismaTipi;        
‘RunMode’ = $ProgYetkiTipi;        
‘RunType’ = $CalismaTipi;        
‘CommandLine’ =  $Komut_kaldir;   
}

komutu verelim:

New-CMProgram @YeniProgramKaldirParametreleri | Out-Null

Paketi dağıtım noktasına gönderelim:

Start-CMContentDistribution -PackageName $paket  -DistributionPointName "sunucu_adiniz.etkialani.com.tr" 

Birden fazla dağıtım noktanız var ise:

Start-CMContentDistribution -PackageName $paket -DistributionPointGroupName “DN sunuculari”

Paket ve programlari kullanmak için, bir koleksiyona dağıtım yapalım:

 $YeniPaketDagitimParametreleri = @{     
‘ProgramName’ = $Program_kur;     
‘StandardProgram’ = $true;     
‘DeployPurpose’ = $DagitimAmaci;     
‘CollectionName’ = $Koleksiyon;     
‘SystemRestart’ = $false;     
‘ScheduleEvent’ = $NeZaman;     
‘FastNetworkOption’ = $HizliAg;     
‘SlowNetworkOption’ = $YavasAg;     
‘PackageName’ = $Paket; 
}

New-CMPackageDeployment  @YeniPaketDagitimParametreleri  | Out-Null

Programı kaldırmak isterseniz yukarıdaki parametrelerden

‘ProgramName’ = $Program_kaldir;
‘DeployPurpose’ = $DagitimAmaci;

değerlerini güncelleyerek tekrar komutu vermeniz yeterli. Paketiniz kullanıma ve test kuruluma hazır.

Yukarıdaki parametre kullanımlı yöntem yerine, önceki uygulama hazırlama yazılarında olan yöntem ile de kullanmak isterseniz, sırası ile şu şekilde yapabilirsiniz:

Yine en baştaki değişkenleri yönetici olarak açılmış PS konsola aktarınız.

ilk olarak yeni paket:

New-CMPackage -Name $Paket -Description $adm_Aciklama -version $surum -IconLocationFile $simge -Manufacturer $firma -Path $adres -Language $dil

Ardından kurulum programı:

New-CMProgram -PackageName $Paket -StandardProgramName $Program_kur -DiskSpaceRequirement $DiskAlani -DiskSpaceUnit $DiskAlaniBirim -DriveMode $Adresturu -Duration $sure -ProgramRunType $ProgCalismaTipi RunMode $ProgYetkiTipi -RunType $CalismaTipi -CommandLine $Komut_kur

Dagıtım noktasına paketi gönderme:
Start-CMContentDistribution -PackageName $paket  -DistributionPointName "sunucu_adiniz.etkialani.com.tr"

Birden fazla dağıtım noktanız var ise:

Start-CMContentDistribution -PackageName $paket -DistributionPointGroupName "DN sunuculari"

Son olarak da koleksiyona paketi ve programı dağıtma:

New-CMPackageDeployment -ProgramName $Program_kur -StandardProgram -DeployPurpose $DagitimAmaci -CollectionName $Koleksiyon -SystemRestart $false -ScheduleEvent $NeZaman -FastNetworkOption $HizliAg -SlowNetworkOption $YavasAg -PackageName $Paket

Ek olarak her iki yömtem için de, ihtiyaç duyabileceğiz bir kaç komutu daha ekleyelim;

Paket içerisinden program silmek isterseniz;

Get-CMProgram -Packagename $paket -ProgramName $Program_kur  | Remove-CMProgram -force -confirm:$false

Dağıtılan paketi koleksiyondan silmek isterseniz:

Remove-CMPackageDeployment -CollectionName $Koleksiyon -ProgramName $Program_kaldir -PackageName $paket -confirm:$false -force

En son paketi de silmek isterseniz:

Remove-CMPackage -Name $paket -force -confirm:$false

Bir sonraki yazıda, işinize yaracağını düşündüğüm, internette bulduğum 1-2 adet PS betikten bahsedeceğim.

Bu arada yukarıda cmd dosya içeriklerini merak edenler için:

nscp_kur.cmd
sc stop nscp
Timeout /T 10

msiexec /i NSCP-x64.msi /qn /log %temp%\nscp_kurulum.txt MONITORING_TOOL=none ADDLOCAL="ALL" ALLOWED_HOSTS=192.168.x.x
:: IP adresi Nagios sunucu adresiniz
Timeout /T 10
xcopy /Y nsclient.ini "C:\Program Files\NSClient++\"
:: kendi ayarlarınızın olduğu ini dosyası
sc stop nscp
Timeout /T 10
sc start nscp
Exit 0

nscp_kaldir.cmd
sc stop nscp
Timeout /T 10
msiexec /x NSCP-x64.msi /qn
Exit 0

İyi çalışmalar.

Kaynak
https://dexterposh.blogspot.com/2015/08/powershell-sccm-2012-create-packages.htmlhttps://www.anoopcnair.com/create-sccm-package-deployment-using-powershell/https://smsagent.blog/2014/01/29/creating-sccm2012-packages-with-powershell/

Hüseyin Çağlar

Emekli sistem yöeticisi :-)

İlgili Makaleler

2 Yorum

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu