如何在脚本中更新变量?

时间:2015-07-18 09:02:32

标签: powershell powershell-v4.0

脚本应该重启服务并在内存使用达到限制后将当前数据和时间保存在文件中。但是它不会节省当前时间,而在服务停止时,它不会在module Foo ( module Foo.A , module Foo.B , bFoo ) where import Foo.A import Foo.B hiding (foo) import qualified B as B bFoo = B.foo 中执行if。它始终在else$data中显示相同的值。我不确定我犯了什么错误。

$stat

1 个答案:

答案 0 :(得分:3)

变量赋值中的语句在赋值时进行计算,而不是在使用变量时进行计算。要获得后者,您可以将语句定义为scriptblocks:

$data = { Get-Date -format 'yyyy\/MM\/dd HH:mm:ss' }
$stat = { Get-Process mysqld -ea SilentlyContinue }

在表达式(&)或子表达式(())中使用调用运算符($())来评估脚本中稍后的脚本块:

if ((&$stat) -ne $null) {
    Add-Content -Path $log -Value "Working"
} else {
    Start-Service $serv
    Add-Content -Path $log -Value "$(&$data)`tStarting"
}

可能更方便的方法是将操作定义为函数:

function Get-Timestamp { Get-Date -format 'yyyy\/MM\/dd HH:mm:ss' }
function Test-MySQLProcess { [bool](Get-Process mysqld -EA SilentlyContinue) }

并像这样使用它们:

if (Test-MySQLProcess) {
    Add-Content -Path $log -Value "Working"
} else {
    Start-Service $serv
    Add-Content -Path $log -Value "$(Get-Timestamp)`tStarting"
}

作为旁注,您应该使用日期格式字符串转义正斜杠,否则Windows会将它们替换为系统区域设置中配置的任何日期分隔符。