Powershell CmdLet mit Enum 2 Fragen
Hi @ All
Auf die Gefahr hin, dass ich mich wieder mal zum Affen mache, habe ich 2 Fragen zu PS 5 mit Enums und hoffe wieder mal auf eure Hilfe
Frage 1:
Es kommt teilweise vor, dass PS mein Enum nicht mehr erkennt. Bedeutet: Kein Intellisence und Fehlermeldung, dass das Enum unbekannt sei (??). Die einzige Lösung die ich bisher finden konnte war, den PC neu zu starten. Ist natürlich kompletter Schmarn.
Kann mir dazu jemand einen Tipp geben wo es hakt?
Frage 2:
wenn man das Property mit Mandatory=$false definiert...
...ist es ja eigentlich $null.
Ich habe es aber noch nicht geschaft einen Standard zu definieren. Etwa wie bei...
Kann mir da jemand einen Tipp geben wie ich das mit Enums mache?
Danke für die Unterstützung!
Mayho
Auf die Gefahr hin, dass ich mich wieder mal zum Affen mache, habe ich 2 Fragen zu PS 5 mit Enums und hoffe wieder mal auf eure Hilfe
Frage 1:
Es kommt teilweise vor, dass PS mein Enum nicht mehr erkennt. Bedeutet: Kein Intellisence und Fehlermeldung, dass das Enum unbekannt sei (??). Die einzige Lösung die ich bisher finden konnte war, den PC neu zu starten. Ist natürlich kompletter Schmarn.
Kann mir dazu jemand einen Tipp geben wo es hakt?
[Flags()] enum ENUMFileTypeSelection {
MSI = 1
MSP = 2
MST = 4
MSIAndMSP = 8
EXE = 16
}
Function Get-MSIProperties() {
[CmdletBinding()]
param (
[Parameter(Mandatory= $true, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true)] [System.IO.FileInfo]$FilePath,
[Parameter(Mandatory= $true, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true)] [ENUMFileTypeSelection]$Filter,
[Parameter(Mandatory= $true, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true)] [string]$PropertyName
)
<#
MSI:
"ProductCode" "ProductName" "ProductVersion" "ProductLanguage" "Manufacturer" "ProductCPU"
MSP:
"TargetProductName" "ManufacturerName" "DisplayName" "ProductLanguage" "Description" "Classification"
#>
$com_object = New-Object -com WindowsInstaller.Installer
if($Filter -eq [ENUMFileTypeSelection]::MSI)
{
[int]$init = 0
[int]$row = 2
$query = "SELECT * FROM Property WHERE Property = '$($PropertyName)'"
}
if($Filter -eq [ENUMFileTypeSelection]::MSP)
{
[int]$init = 32
[int]$row = 3
$query = "SELECT * FROM MsiPatchMetadata WHERE Property = '$($PropertyName)'"
}
$database = $com_object.GetType().InvokeMember("OpenDatabase", "InvokeMethod", $Null, $com_object, @($FilePath.FullName, $init))
$View = $database.GetType().InvokeMember("OpenView","InvokeMethod",$Null,$database,($query))
$dummy = $View.GetType().InvokeMember("Execute", "InvokeMethod", $null, $View, $null)
$record = $View.GetType().InvokeMember("Fetch", "InvokeMethod", $null, $View, $null)
(($record.stringdata($row) -replace "`n|`r|`t") -join ',').Trim(' ')
}
$pVersion = Get-MSIProperties -FilePath $MSIFiles -Filter 'MSI' -PropertyName "ProductVersion"
Frage 2:
wenn man das Property mit Mandatory=$false definiert...
[Parameter(Mandatory= $false)[MyEnum]$Select
Ich habe es aber noch nicht geschaft einen Standard zu definieren. Etwa wie bei...
[ValidateSet("A","B")]$Select= 'A'
Kann mir da jemand einen Tipp geben wie ich das mit Enums mache?
Danke für die Unterstützung!
Mayho
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 631606
Url: https://administrator.de/contentid/631606
Ausgedruckt am: 23.11.2024 um 22:11 Uhr
3 Kommentare
Neuester Kommentar