Я извлекаю информацию из базы данных с DNS-именем системы. Как только я получу информацию, я настроил ее, чтобы заменить части имени компьютера, которые я больше не хочу.Невозможно развернуть PSObject
Проблема заключается в том, что после того, как замена выполнена, я больше не могу выбирать объекты - она просто возвращает пробелы, если вы выберете DnsName
, или если вы посмотрите на переменную, она просто покажет @{Dnsname=computer123}
. Я пробовал -ExpandProperty
, но это тоже не работает.
function ExecuteSqlQuery($SQLQuery) {
$Server = "localhost"
$Database = "DB123"
$Array = @()
#Create and open a database connection
$Connection = New-Object System.Data.SQLClient.SQLConnection
$Connection.ConnectionString = "server='$Server';database='$Database';trusted_connection=true;"
$Connection.Open()
#Create a command object
$Command = New-Object System.Data.SQLClient.SQLCommand
$Command.Connection = $Connection
$Command.CommandText = $SQLQuery
#Execute the Command
$Reader = $Command.ExecuteReader()
$Counter = $Reader.FieldCount
#Parse the records
while ($Reader.Read()) {
for ($i =0; $i -lt $Counter; $i++) {
$Array += $Reader.GetValue($i)
}
}
# Close the database connection
$Connection.Close()
return $Array
}
$DNSsys = "SELECT DnsName FROM Systems"
$DNSName = ExecuteSqlQuery ($DNSsys)
$DNSName = $DNSName -replace '.123.com', '' -replace '.abc.com', ''
Я также столкнулся с той же проблемой, когда я тяну информацию из SCCM на код ниже, где все хорошо, пока -replace
не запускается:
# Create the PSSession
$Session = New-PSSession -ComputerName sccmserver
# Load the CM Module using Implicit Remoting
Import-Module -Name "C:\Program Files\Microsoft Configuration Manager\AdminConsole\bin\ConfigurationManager.psd1" -PSSession $Session
#Set the CMSite as our current location to run the CM cmdlets
Invoke-Command -Session $Session {Set-Location -Path LOC:}
$SCCMdevices = Get-CMDevice -CollectionName "All Systems" | Where {$_.IsActive -like "True"} | Select-Object -Property Name, DeviceOS
$SCCMdevices = $SCCMdevices -replace 'Microsoft Windows NT Workstation 5.1', 'Windows XP' `
-replace 'Microsoft Windows NT Workstation 5.1 (Tablet Edition)', 'Windows XP' `
-replace 'Microsoft Windows NT Workstation 6.1', 'Windows 7' `
-replace 'Microsoft Windows NT Workstation 6.1 (Tablet Edition)', 'Windows 7' `
-replace 'Microsoft Windows NT Workstation 6.1 (Embedded)', 'Windows 7' `
-replace 'Microsoft Windows NT Workstation 6.2', 'Windows 8' `
-replace 'Microsoft Windows NT Workstation 6.2 (Tablet Edition)', 'Windows 8' `
-replace 'Microsoft Windows NT Workstation 6.3', 'Windows 8.1' `
-replace 'Microsoft Windows NT Workstation 6.3 (Tablet Edition)', 'Windows 8.1' `
-replace 'Microsoft Windows NT Workstation 10.0', 'Windows 10' `
-replace 'Microsoft Windows NT Workstation 10.0 (Tablet Edition)', 'Windows 10' `
-replace 'Microsoft Windows NT Server 5.2', 'Windows Server 2003' `
-replace 'Microsoft Windows NT Advanced Server 5.2', 'Windows Server 2003' `
-replace 'Microsoft Windows NT Server 6.0', 'Windows Server 2008' `
-replace 'Microsoft Windows NT Advanced Server 6.0', 'Windows Server 2008' `
-replace 'Microsoft Windows NT Server 6.1', 'Windows Server 2008 R2' `
-replace 'Microsoft Windows NT Advanced Server 6.1', 'Windows Server 2008 R2' `
-replace 'Microsoft Windows NT Server 6.2', 'Windows Server 2012' `
-replace 'Microsoft Windows NT Advanced Server 6.2', 'Windows Server 2012' `
-replace 'Microsoft Windows NT Server 6.3', 'Windows Server 2012 R2' `
-replace 'Microsoft Windows NT Advanced Server 6.3', 'Windows Server 2012 R2' `
-replace 'Microsoft Windows NT Server 10.0', 'Windows Server 2016' `
-replace 'Microsoft Windows NT Advanced Server 10.0', 'Windows Server 2016' `
-replace '6.1', 'Windows 7' `
-replace '10.0', 'Windows 10'
функция вы вывесили должны вернуться массив строк для данного запроса, а не массив объектов. –
Пожалуйста, рассмотрите вопрос о предоставлении [MCVE (минимальный, полный и проверенный пример)] (http://stackoverflow.com/help/mcve). – mklement0
Добавление другого фрагмента кода, который делает что-то совершенно другое, не поможет прояснить ваш вопрос. Кроме того, вместо того, чтобы использовать метрическую тонну операций '-replace', я настоятельно рекомендую сопоставить имена ОС с их заменяемым значением хэш-таблицей во втором скрипте. –