我们如何优化下面的PowerShell脚本?

问题描述:

我的意图是更新SQL代理服务密码,并将其放在HTML文件中。我们如何优化下面的PowerShell脚本?

$server = "LocalHost";$OldPass = "xyz";$NewPass = "abc" 
[System.Reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.SqlWmiManagement") | out-null 
$wmi = new-object ("Microsoft.SqlServer.Management.Smo.Wmi.ManagedComputer") $server 
$wmi.services | where {($_.ServiceAccount -eq '.\Ramu' -and $_.Type -eq 'SQLAgent')} | foreach {$_.ChangePassword($OldPass,$NewPass)} 
$wmi.services | where {($_.ServiceAccount -eq '.\Ramu' -and $_.Type -eq 'SQLAgent')} | Select-object @{label="Server";expression={$wmi.name}},Name,Type,ServiceAccount,DisplayName,@{label="Status";expression={"Passwword update completed successfully on " + (get-date).ToString()}} | ConvertTo-HTML -head $a -body "<H2>$server SQL Service Account Password Update Status</H2>" | Out-File D:\RP-TEST\Test.htm 

没有人回答,可能是因为目前还不清楚“优化”在您的上下文中的含义。唯一的提示我可以给你,就是:

  • 可以消除Where一部分,因为你把它叫做两次
  • 排长如最后一个非常难以阅读。切他们。

编辑的代码:

$server = "LocalHost";$OldPass = "xyz";$NewPass = "abc" 

Add-type "Microsoft.SqlServer.SqlWmiManagement" | out-null 

$wmi = new-object ("Microsoft.SqlServer.Management.Smo.Wmi.ManagedComputer") $server 
$wmi.services | 
    Where {($_.ServiceAccount -eq '.\Ramu' -and $_.Type -eq 'SQLAgent')} | 
    Foreach {$_.ChangePassword($OldPass,$NewPass); $_} | # note the added $_ 
    Select-object @{label="Server";expression={$wmi.name}},Name,Type,ServiceAccount,DisplayName,@{label="Status";expression={"Passwword update completed successfully on " + (get-date).ToString()}} | 
    ConvertTo-HTML -head $a -body "<H2>$server SQL Service Account Password Update Status</H2>" | 
    Out-File D:\RP-TEST\Test.htm 
+1

我准备了完全一样的答案。没有提交。似乎毫无意义的“优化”一个脚本,如果它正在工作,而且运行速度太慢。 – manojlds