我有一个PowerShell脚本中的散列表(缩写了几个例子,但包含大约8个左右的项目):
– 这个哈希表之前的代码构build了$ ivariables,所以我只是提供它应该是这个例子。 这取决于服务器上的SQL版本。 所以SQL 2008 R2默认实例将是“MSSQL10_50.MSSQLServer”。
$i = 'HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER' $SQLPaths = @{ 'DefaultData'=(Get-ItemProperty "$i\MSSQLServer").DefaultLog; 'RepWorking'=(Get-ItemProperty "$i\Replication").WorkingDirectory }
我的问题/问题是否有一个快捷方式来testing这个registrypath(testingpath)之前哈希表设置值,或尝试? 我有这样的一些键,如果function或设置从未设置,那么该键将不会实际存在。 这是好的,但我怎么能忽略它,如果没有,只是让该值在哈希表中为空?
在PowerShell中, if语句可以用作expression式:
$i = 'HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER' $SQLPaths = @{ 'DefaultData'= if (Test-Path "$i\MSSQLServer") { (Get-ItemProperty "$i\MSSQLServer").DefaultLog } else { $null }; 'RepWorking'=(Get-ItemProperty "$i\Replication").WorkingDirectory }
另外,如果您使用的是PowerShell社区扩展 (PSCX),那么它会添加一个Invoke-Ternary (别名?: :)函数,这可能会减less冗余:
$i = 'HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER' $SQLPaths = @{ 'DefaultData'= ?: {Test-Path "$i\MSSQLServer"} ` { (Get-ItemProperty "$i\MSSQLServer").DefaultLog } ` { $null }; 'RepWorking'=(Get-ItemProperty "$i\Replication").WorkingDirectory }