Доброе утро,
Я пытаюсь создать сложный графический интерфейс 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, он учитывает все и выполняет преобразование, если выбран тип данных datetime.
Спасибо за любую помощь или помощь, которая может прийти:)
Nad