繁体   English   中英

Powershell格式化调用-sqlcmd

[英]Powershell Formatting Invoke-sqlcmd

我正在创建一个脚本来从多个SQL服务器中获取信息,然后将其泵送到用户可以访问的文件中,而不必一直打给我。 我现在遇到的问题是格式化invoke-sql命令的输出格式,以便可以将其放入哈希表中。 我想在一列(即Microsoft SQL Server 2008)中获得SQL版本,第二列具有内部版本号(即10.0.5512.0)。 接下来是我创建的代码及其输出。 如您所见,我获取了信息,但无法将其放入哈希表。 它只是把...放在桌子上。

$SQLVerPart1= Invoke-Sqlcmd -Query "select @@VERSION;" -ServerInstance $Server | Out-String | ForEach-Object { $_ -replace '-.*'}

$SQLVerPart2 = Invoke-Sqlcmd -Query "select SERVERPROPERTY ('productversion')" -ServerInstance $Server | Out-String 

$SQLVerPart1 | Out-File -Append $Log
$SQLVerPart2 | Out-File -Append $Log
$SQLVer.add($SQLVerPart1,$SQLVerPart2)

OUTPUT:

列1

Microsoft SQL Server 2008(SP3)

列1


10.0.5512.0

名称值

---- ----- ... ...

您要尝试避免过早转换为字符串。 变量分配中的Out-String包括每个对象的Column1标题。 获取原始属性,如下所示:

$SQLVerPart1 = (Invoke-Sqlcmd -Query "select @@VERSION" -ServerInstance $Server).Column1 -replace "\n", "" -replace '-.*' 
$SQLVerPart2 = (Invoke-Sqlcmd -Query "select SERVERPROPERTY ('productversion')" -ServerInstance $Server).Column1

至于哈希表,您确定这就是您想要的吗? 如果您有两个“ Microsoft SQL Server 2008(SP3)”实例,则第二个“添加”将失败。 也许您想要一个对象数组。 就像是:

$SQLVer = $ListOfServers | ForEach-Object {
  $SQLVerPart1 = (Invoke-Sqlcmd -Query "select @@VERSION" -ServerInstance $_).Column1 -replace "\n", "" -replace '-.*' 
  $SQLVerPart2 = (Invoke-Sqlcmd -Query "select SERVERPROPERTY ('productversion')" -ServerInstance $_).Column1

  New-Object -Type PSObject -Property @{ Version = $SqlVerPart1; BuildNumber = SqlVerPart2 }
}

然后,您可以担心在收集数据后将其记录或输出:

$SQLVer | Out-String

我用我的脚本做类似的事情。 这不会让您100%地到达目的地,但是应该可以帮助您朝着想要的方向前进。

对于我的SQL Server审核脚本,我运行以下四个命令:

$ProductVersion = Invoke-Sqlcmd2 -Query "SELECT SERVERPROPERTY('productversion')" -ServerInstance $InstanceName
$ProductEdition = Invoke-Sqlcmd2 -Query "SELECT SERVERPROPERTY('edition')" -ServerInstance $InstanceName
$CurrentTime = Invoke-Sqlcmd2 -Query "SELECT GETDATE()" -ServerInstance $InstanceName
$UserName = Invoke-Sqlcmd2 -Query "SELECT SUSER_SNAME()" -ServerInstance $InstanceName

稍后,我创建一个哈希表,如下所示:

$hashPropsFormalities = @{
    "Instance Name" = $InstanceName
    "Product Version" = $ProductVersion[0]
    "Product Edition" = $ProductEdition[0]
    "User Name" = $UserName[0]
    "Current Time" = $CurrentTime[0]
}

然后将哈希表打印到控制台:

$hashPropsFormalities | FT -HideTableHeaders

为了在文本文件中捕获控制台输出的副本,我使用Start-Transcript (与之对应的Stop-Transcript )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM