new-object:找不到"Server"的重载,参数计数:在PowerShell脚本中"*numberofservers*"



代码目标:提取服务器的某些对象属性。我使用以下代码获取这些服务器的列表:

 $serverlist = (get-adcomputer -filter {dnshostname -like "*SQL*" -and operatingsystem -like "windows *server*"}).name

然后,我使用以下命令遍历列表中的每个名称:

$serverlist | ForEach-Object {
  $s = new-object Microsoft.SqlServer.Management.SMO.Server($serverlist)
 $s | Format-List @{Name = "Server";e={$s.Name}},
  @{Name = "VersionString";e={$s.VersionString}},
  @{Name = "Product Level";e={$s.ProductLevel}},
  @{Name = "Collation";e={$s.Collation}}, 
  @{Name = "Credentials";e={$s.Credentials}}, 
  @{Name = "Clustered?";e={$s.IsClustered}}, 
  @{Name = "One Owner?";e={$s.IsSingleUser}}, 
  @{Name = "Root";e={$s.RootDirectory}} | Out-File -path -append

我收到"服务器"的新对象过载错误与服务器一样多。我不确定是什么导致了这个问题;当我为$serverlist硬编码一台计算机名称时,代码工作正常。即

$serverlist = @("Some-Server-01")

一旦我使用服务器列表作为输入,我就开始收到此错误。帮助将不胜感激。

更多错误信息:

At C:somepath
+   $s = new-object Microsoft.SqlServer.Management.SMO.Server($serverli ...
+ CategoryInfo          : InvalidOperation: (:) [New-Object], MethodException
+ FullyQualifiedErrorId : ConstructorInvokedThrowException,Microsoft.PowerShell.Commands.NewObjectCommand
您可能

希望创建一个新的Server对象,基于各个服务器的名称,而不是基于$ServerList,这是一个AD计算机对象的数组。请记住,您正在foreach循环中工作,该循环对对象数组中的每个项目运行一次($ServerList)。

不能使用计算机对象数组创建 SQL SMO Server对象。您可以基于单个系统的名称创建一个。

$s = New-Object -TypeName Microsoft.SqlServer.Management.SMO.Server -ArgumentList $PSItem

最新更新