Powershell中笨拙的函数-如何使其简洁?
我刚刚在Powershell中编写了一个简单的函数Powershell中笨拙的函数-如何使其简洁?,powershell,powershell-2.0,Powershell,Powershell 2.0,我刚刚在Powershell中编写了一个简单的函数 Function Get-Stage { $myEnv = Get-Environment $devEnvs = "D","Dev","Test","T" $prodEnvs = "P","U","PTA","B" if($devEnvs -contains $myEnv) { return "D" } elseif($prodEnvs -contains $
Function Get-Stage
{
$myEnv = Get-Environment
$devEnvs = "D","Dev","Test","T"
$prodEnvs = "P","U","PTA","B"
if($devEnvs -contains $myEnv)
{
return "D"
}
elseif($prodEnvs -contains $myEnv)
{
return "P"
}
}
编辑
Get-Environment
是一个读取注册表以查找环境文本的函数,该文本可以是$devEnvs
和$prodEnvs
中列出的任何字符串值。函数将根据从获取环境返回的内容返回D
或P
我不喜欢它。有没有一种好的、可读的、简洁的编写方法,你能想到吗?好吧,关于更好地编写代码的方法的问题在很大程度上是基于不同的观点,但是你可以做如下事情:
function Get-Stage
{
$environment = Get-Environment
switch ($environment)
{
{$PSItem -in "D","Dev","Test","T"}{
Write-Output "D"
}
{$PSItem -in "P","U","PTA","B"}{
Write-Output "P"
}
default{
Write-Error "Invalid environment value in registry ('$PSItem')"
}
}
}
switch ($environment)
{
{"D","Dev","Test","T" -contains $_}{
Write-Output "D"
}
{"P","U","PTA","B" -contains $_}{
Write-Output "P"
}
default{
Write-Error "Invalid environment value in registry ('$_')"
}
}
如果要支持PowerShell v2,只需将switch语句更改为以下内容:
function Get-Stage
{
$environment = Get-Environment
switch ($environment)
{
{$PSItem -in "D","Dev","Test","T"}{
Write-Output "D"
}
{$PSItem -in "P","U","PTA","B"}{
Write-Output "P"
}
default{
Write-Error "Invalid environment value in registry ('$PSItem')"
}
}
}
switch ($environment)
{
{"D","Dev","Test","T" -contains $_}{
Write-Output "D"
}
{"P","U","PTA","B" -contains $_}{
Write-Output "P"
}
default{
Write-Error "Invalid environment value in registry ('$_')"
}
}
好的,关于更好地编写代码的方法的问题在很大程度上是基于不同的观点,但是您可以做如下事情:
function Get-Stage
{
$environment = Get-Environment
switch ($environment)
{
{$PSItem -in "D","Dev","Test","T"}{
Write-Output "D"
}
{$PSItem -in "P","U","PTA","B"}{
Write-Output "P"
}
default{
Write-Error "Invalid environment value in registry ('$PSItem')"
}
}
}
switch ($environment)
{
{"D","Dev","Test","T" -contains $_}{
Write-Output "D"
}
{"P","U","PTA","B" -contains $_}{
Write-Output "P"
}
default{
Write-Error "Invalid environment value in registry ('$_')"
}
}
如果要支持PowerShell v2,只需将switch语句更改为以下内容:
function Get-Stage
{
$environment = Get-Environment
switch ($environment)
{
{$PSItem -in "D","Dev","Test","T"}{
Write-Output "D"
}
{$PSItem -in "P","U","PTA","B"}{
Write-Output "P"
}
default{
Write-Error "Invalid environment value in registry ('$PSItem')"
}
}
}
switch ($environment)
{
{"D","Dev","Test","T" -contains $_}{
Write-Output "D"
}
{"P","U","PTA","B" -contains $_}{
Write-Output "P"
}
default{
Write-Error "Invalid environment value in registry ('$_')"
}
}
这有什么好处吗
Function Get-Stage
{
$myEnv = Get-Environment;
$envDict = @{
"D" = @("Dev","Test","T");
"P" = @("U","PTA","B")
};
$envDict.Keys | foreach {
$envs = @($_) + $dict[$_];
if($envs -contains $myenv) { return $_; }
}
}
这有什么好处吗
Function Get-Stage
{
$myEnv = Get-Environment;
$envDict = @{
"D" = @("Dev","Test","T");
"P" = @("U","PTA","B")
};
$envDict.Keys | foreach {
$envs = @($_) + $dict[$_];
if($envs -contains $myenv) { return $_; }
}
}
你能解释一下这个功能的用途吗?
Get-Environment
做什么?你期望从这个函数中得到什么输入和输出?Get Environment在做什么?我已经更新了这个问题。你能解释一下这个函数的用途吗?Get-Environment
做什么?您希望此函数有哪些输入和输出?Get Environment在做什么?我已经更新了问题Robert我使用的是powershell 2,我想此解决方案无法与此配合使用$PSItem是v3以后的版本,对吗?更新了我的答案,包括对v2的支持。但是,如果您想支持动态列表加载,请查看@neolik.Robert建议的解决方案。我使用的是powershell 2,我想这个解决方案不适用于此$PSItem是v3以后的版本,对吗?更新了我的答案,包括对v2的支持。但是,如果您想支持动态列表加载,请查看@neolik建议的解决方案。实际上,该解决方案看起来有点难以阅读。也许我的简单解决方案并没有那么糟糕。@MooMinTroll:不过,它应该更易于维护。没有任何东西的重复——代码或数据。您只需扩展其中的$envDict
,它甚至可以是一个XML文件,因此维护它的人不需要了解Powershell。实际上,它看起来更难阅读。也许我的简单解决方案并没有那么糟糕。@MooMinTroll:不过,它应该更易于维护。没有任何东西的重复——代码或数据。您只需要扩展部分,其中显示$envDict
,甚至可以是XML文件,因此维护它的人不需要了解Powershell。