Powershell 为什么';psake是否以我期望的方式评估我的财产?

Powershell 为什么';psake是否以我期望的方式评估我的财产?,powershell,psake,Powershell,Psake,我有一个简单的诗篇脚本: properties { $SolutionDir = "SOLUTIONDIR" # Resolve-Path ".\src" $Config = "Debug" $DeployBaseDir = "$SolutionDir\RMSS.Setup.WiX\bin\$Config" $InstallerName = "RMSForMoversSuite_2_0_0" } task default -depends Test task

我有一个简单的诗篇脚本:

properties {
    $SolutionDir = "SOLUTIONDIR" # Resolve-Path ".\src"
    $Config = "Debug"
    $DeployBaseDir = "$SolutionDir\RMSS.Setup.WiX\bin\$Config"
    $InstallerName = "RMSForMoversSuite_2_0_0"
}

task default -depends Test

task Test {
    "CONFIG = $Config"
    "SOLUTIONDIR = $SolutionDir"
    "DEPLOYBASEDIR = $DeployBaseDir"
}
我从命令行这样调用它:

&.\psake.ps1.\deploy.ps1-properties@{“Config”=“Staging”}

我希望
$DeployBaseDir
等于
SOLUTIONDIR\RMSS.Setup.WiX\bin\Staging

但是,我得到了以下输出:

CONFIG = Staging
SOLUTIONDIR = SOLUTIONDIR
DEPLOYBASEDIR = SOLUTIONDIR\RMSS.Setup.WiX\bin\Debug
有人能告诉我发生了什么,为什么,以及如何得到我期望的行为吗?

从这里开始

支持参数和属性

调用psake有两个新选项,参数和属性。参数是传递到当前构建脚本中的哈希表。这些参数是在生成脚本中的任何“属性”函数之前处理的,这意味着您可以从属性中使用它们

invoke-psake Deploy.ps1 -parameters @{server=’Server01’}

# Deploy.ps1
properties {
  $serverToDeployTo = $server
    }

task default -depends All
当您有所需信息时,参数非常有用。另一方面,属性用于替代默认值

invoke-psake Build.ps1 -properties @{config='Release'}

# Build.ps1
properties {
  $config = 'Debug'
}

task default -depends All

因此,您可以从属性中取出$Config并将其作为参数传入。

或者从属性中取出$DeployBaseDir,并在任务块中创建它,以防您仍然希望为属性使用默认值,同时使用参数这里是示例操作

properties {
    $SolutionDir = "SOLUTIONDIR" # Resolve-Path ".\src"
    $Config = if($config){$config} else {"Debug"};
    $DeployBaseDir = "$SolutionDir\RMSS.Setup.WiX\bin\$Config"
    $InstallerName = "RMSForMoversSuite_2_0_0"
}

task default -depends Test

task Test {
    "CONFIG = $Config"
    "SOLUTIONDIR = $SolutionDir"
    "DEPLOYBASEDIR = $DeployBaseDir"
}

& .\psake.ps1 .\deploy.ps1 -parameters @{config="Staging"}
(使用psake 4.3.2进行测试)


这鼓励了老一辈学生灵活地使用约定而不是配置,以便继续使用配置意大利面

在使用属性之前对其进行评估是PowerShell还是psake?”因为这太糟糕了。哦,把值放在参数中而不是属性中就像一个符咒。谢谢