UNIX/Linux Copy Downloaded Kit Write Action

Microsoft.Unix.CopyDownloadedKit.WriteAction (WriteActionModuleType)

Element properties:

TypeWriteActionModuleType
IsolationAny
AccessibilityPublic
RunAsMicrosoft.Unix.CertSigningAccount
InputTypeSystem.BaseData
OutputTypeSystem.BaseData

Member Modules:

ID Module Type TypeId RunAs 
CopyFiles WriteAction Microsoft.Windows.PowerShellWriteAction Default

Source Code:

<WriteActionModuleType ID="Microsoft.Unix.CopyDownloadedKit.WriteAction" RunAs="Microsoft.Unix.CertSigningAccount" Accessibility="Public" Batching="false">
<Configuration>
<xsd:element name="Files" type="xsd:string"/>
<xsd:element name="PlatformID" type="xsd:string"/>
<xsd:element name="CurrentVersion" type="xsd:string"/>
</Configuration>
<ModuleImplementation Isolation="Any">
<Composite>
<MemberModules>
<WriteAction ID="CopyFiles" TypeID="Windows!Microsoft.Windows.PowerShellWriteAction">
<ScriptName>CopyDownloadedKits.ps1</ScriptName>
<ScriptBody><Script>
param ([string]$Files, [string]$PlatformID, [string]$CurrentVersion)

#Get Path to OpsMgr Directory from Registry
$RegPathValue= Get-ItemProperty -path "HKLM:\SOFTWARE\Microsoft\Microsoft Operations Manager\3.0\Setup" -name InstallDirectory
$OpsMgrDirectory = $RegPathValue.InstallDirectory
$TargetDirectory = $OpsMgrDirectory + "AgentManagement\UnixAgents\DownloadedKits"

#If Target subdir does not exist, create it
If (!(Test-Path -Path "$TargetDirectory")) {New-Item -ItemType:Directory -Path:"$TargetDirectory"}

#For each input file, copy to target directory
[array]$ArFiles = $Files.Split(",")
ForEach ($File in $ArFiles){
$ArFilePath = $File.Split("\")
$FileName = $arFilePath[$arFilePath.Length -1]

If ((Test-Path -Path "$TargetDirectory") -and (Test-Path -Path "$File")){
$TargetFile = $TargetDirectory + "\" + $FileName
If (!(Test-Path -Path $TargetFile)){
Try{
Copy-Item "$File" "$TargetDirectory"
Write-output "Copied agent file: $File to the directory: $TargetDirectory"
}
Catch{
Write-output "Failed to copy agent file: $File to the directory: $TargetDirectory"
}
}
}Else{
Write-output "Failed to copy agent file: $File to the directory: $TargetDirectory. The source or target does not exist."
}
}

#Remove old versions of these agent kits from target directory
If (Test-Path -Path "$TargetDirectory"){
If (($PlatformID.Length -gt 0) -and ($CurrentVersion -match "scx-"))
{
get-childitem "$TargetDirectory\scx-*.$PlatformID.*" -Include:*.x86*,*.x64*,*.sparc*,*.ppc*,*.ia64*,*.parisc* | ForEach-object{
if ($_.Name -notmatch "$CurrentVersion"){

Try{
$_.Delete()
Write-output "Deleted file $_"
}
Catch{
Write-output "Failed to delete file $_"
}


}
}
}

}
</Script></ScriptBody>
<Parameters>
<Parameter>
<Name>Files</Name>
<Value>$Config/Files$</Value>
</Parameter>
<Parameter>
<Name>PlatformID</Name>
<Value>$Config/PlatformID$</Value>
</Parameter>
<Parameter>
<Name>CurrentVersion</Name>
<Value>$Config/CurrentVersion$</Value>
</Parameter>
</Parameters>
<TimeoutSeconds>300</TimeoutSeconds>
</WriteAction>
</MemberModules>
<Composition>
<Node ID="CopyFiles"/>
</Composition>
</Composite>
</ModuleImplementation>
<OutputType>System!System.BaseData</OutputType>
<InputType>System!System.BaseData</InputType>
</WriteActionModuleType>