使用Azure自动化开发PowerShell脚本可能会非常缓慢。这可以通过使用PowerShell伊势插件来帮助,该插件允许您在本地测试运行脚本。
但是,不可避免的是,在本地运行时,有些事情会与在Azure自动化中运行时有所不同。例如文件路径。
检测脚本当前运行环境的正确方法是什么?
目前我定义了一个可变资产,我只保留在本地,不上传。然后我可以这样做:
# Check if we are running locally - NOTE: Do not upload the runningLocally variable! Keep it local only
if (Get-AutomationVariable -Name 'runningLocally') {
# We are running locally
} else {
# We are running in Azure Automation
}
但这似乎相当笨重和容易出错。我正在寻找一种更强大和可靠的方法。
我发现了一些额外的方法。在AA中运行时,机器和用户名都是“客户端”,这似乎是一个更健壮的方法?
3条答案
按热度按时间enxuqcxy1#
适用于PowerShell 5.1、7.1和7.2
this answer中的
$PSPrivateMetadata.JobId
在使用PowerShell 7.1的Azure自动化Runbook上不起作用,因此我搜索了另一种解决方案,最终找到了合适的环境变量($env:AZUREPS_HOST_ENVIRONMENT
)。它在PowerShell 5.1和PowerShell 7.1的Azure自动化运行手册中返回“AzureAutomation/”,并且不存在于本地环境中。
如果你只想区分“本地”和“任何其他环境”,你可以使用这个简短的版本:
**更新(2023年9月20日):**根据this blog post,
$PSPrivateMetadata.JobId
现在也可以在PowerShell 7.2中使用,因此更新的代码段应该可以在PowerShell 5.1,7.1和7.2上使用。q8l4jmvw2#
您可以使用您已经发现的用户名/计算机名进行此操作,或者您可以检查是否存在Runbook作业ID:
v8wbuo2f3#
不确定是否有一个“正确的方法”,但如果你想检查你是否在Powershell伊势中运行脚本,你可以检查
$psISE
-变量是否存在。