早上好
我正在尝试制作复杂的GUI PowerShell,并且某些数据输出出现问题。 我将CheckedListBox + TextBox与导入的csv混合使用以在屏幕上输出结果。
现在,对于我想拥有的大多数已检查数据,它都可以工作,但是我需要处理的某些数据在显示之前需要进行转换,这就是问题所在。
有问题的代码部分在下面
if($ButtonMultiAttr.Checked -eq 'Multiple Attribute' -and $textboxUser.Text -like '*c:\*'){
#Get all int64 properties' type 'some contains datetime data type'
$DateType1 = (Get-ADUser allouamo -Property * | select accountExpires, lastLogonTimestamp, lastlogon, pwdlastset).psobject.properties | select name
#Get all Datetime properties' type
$DateType2 = (Get-ADUser Allouamo -properties *).PsObject.Properties | Where{$_.TypeNameOfValue -eq 'System.DateTime'} |select Name, Value
#Add variable to use them in the next prompt
$List = $ListBoxMultiAtr.CheckedItems
$Users = Import-Csv $TextBoxUser.Text
$Datedata1 = foreach($User in $Users){Get-ADUser $User.name -property $DateType1 | Select @{name=$DateType1;e={[datetime]::FromFileTime($_."$DateType1")}} | out-string}
$Datedata2 = foreach($User in $Users) {Get-ADUser $User.name -properties $DateType2.name | Select-object -property $List | Format-list | out-string}
$UserInfo = foreach($User in $Users) {Get-ADUser $User.name -properties $List | select $list | format-list | Out-String}
$Data = ('accountExpires', 'badPasswordTime', 'lastLogonTimestamp', 'lastlogon', 'pwdlastset')
Switch($List){
{$Data -contains $_}{$ResultBox.Text = $DateData1}
{$Datetype2.name -contains $_}{$ResultBox.Text = $DateData2}
default{$ResultBox.Text = $Userinfo}}
}
问题在于$ Datedata1,从我得到的特定属性中,我转换为日期时间可读数据,然后将其注入到切换列表中以在屏幕上输出。
问题是,进行测试时,这是我得到的错误:
Select: The key "Name" if of System.Object[] type not valid ; The awaited type is System.String
我尝试了许多不同的方法,其中一些是: -使用$ List这是我的盒子中检查的数据 -使用$ Data,它是需要转换的属性“不使用DateType1变量” -使用此代码
$DateData1 = get-aduser $users -property $datetype1.name | select $datetype1.name
foreach ($prop in $DateType1.name) {
$DateData1.$prop = [datetime]::FromFileTime($DateData1.$prop)
}
错误代码
Get-ADUser : Impossible to convert "System.Object[]" to "Microsoft.ActiveDrirectory.Management.ADUser" type, required by the parameter "Identity. The specified method is not taken in charge
或
$DateData1 = Foreach($user in $users){get-aduser $user.name -property $datetype1.name | select $datetype1.name}
foreach ($prop in $DateType1.name) {
$DateData1.$prop = [datetime]::FromFileTime($DateData1.$prop)
}
错误:
Impossible to convert the argument «fileTime» (Value «System.Object[]») of «FromFileTime» to «System.Int64» type: «Impossible to convert the value «System.Object[]» of «System.Object[]» type to «System.Int64» type.
我要寻找的是,尽管我可以从复选框1、2或10中进行选择,但它会考虑所有因素,并且如果选择了这些日期时间数据类型,则会进行转换。
谢谢您的启发或帮助:)
Nad