【问题标题】:How to invoke PS script in Administrator mode remotely如何在管理员模式下远程调用 PS 脚本
【发布时间】:2020-09-24 15:26:20
【问题描述】:

我正在 AWS 中设置一个基础设施,其中基于 Windows 的 EC2 实例通过 Cloudformation 模板启动,并且在 EC2 实例的启动配置中调用 UserData 脚本(Powershell 脚本)。 EC2 实例的 CF 模板如下所示:

"<powershell>\n",
"Start-Transcript -Path \"C:\\UserDataTranscript.txt\" -Append",
"Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process -Force",
"Import-Module AWSPowerShell",
{"Fn::Sub": "Set-DefaultAWSRegion -Region ${AWS::Region}"},
"New-Item -Path C:\\UserData -ItemType \"directory\" -Force",
{ "Fn::Sub": ["Read-S3Object -BucketName ${UserDataBucket} -Key EC2UserData.ps1 -File C:\\UserData\\EC2UserData.ps1",
    { "UserDataBucket": { "Fn::Select": [0, {"Ref": "S3UserDataFilesParameterStoreKey"}] } }
]},
"C:\\UserData\\EC2UserData.ps1",
"Stop-Transcript",
"</powershell>"

这就是EC2UserData.ps1 脚本的样子:

$params = @(
        "/q"
        "ADDRESS=$wazuhServerIP"
        "AUTHD_SERVER=$wazuhAuthServerIP"
        "PROTOCOL=`"TCP`""
        "AUTHD_PORT=`"55000`""
    )
$proc = Start-Process -FilePath "C:\UserData\wazuh-agent.msi" -ArgumentList $params -PassThru
$proc | Wait-Process -Timeout 40 -ErrorAction Stop

我在这里的脚本中安装 Wazuh 代理,需要管理员权限才能安装。我尝试添加-Verb runAs,但没有成功。

【问题讨论】:

  • Start-Process ... -Verb RunAs 出现什么错误?
  • 没有抛出错误,这就是它的奇怪部分。我怀疑这可能是因为 UAC 弹出确认安装阻止了安装过程。我尝试通过运行此命令来禁用它,但即使这样也失败并出现访问被拒绝错误:Set-ItemProperty -Path REGISTRY::HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System -Name ConsentPromptBehaviorAdmin -Value 0

标签: windows amazon-web-services powershell


【解决方案1】:

在 CloudFormation 中尝试您的模板后,我可以看到该模板上的一些错误(脚本运行良好),请查看此模板(基于您的):

{
    "AWSTemplateFormatVersion": "2010-09-09",
    "Metadata": {
        "AWS::CloudFormation::Designer": {
            "YOUR_DESIGNER_ID": {
                "size": {
                    "width": 60,
                    "height": 60
                },
                "position": {
                    "x": 600,
                    "y": 200
                },
                "z": 0,
                "embeds": []
            }
        }
    },
    "Resources": {
        "WindowsInstance": {
            "Type": "AWS::EC2::Instance",
            "Properties": {
                "KeyName": "YOUR_KEY_NAME",
                "IamInstanceProfile": "YOUR_INSTANCE_PROFILE",
                "SecurityGroupIds": [ "YOUR_SECURITY_GROUP" ],
                "ImageId": "YOUR_AMI_ID",
                "UserData": {
                    "Fn::Base64" : { 
                        "Fn::Join" : [ "",[
                            "<powershell>\n",
                            "Start-Transcript -Path 'C:\\UserDataTranscript.txt' -Append\n",
                            "Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process -Force\n",
                            "Import-Module AWSPowerShell\n",
                            { "Fn::Sub": "Set-DefaultAWSRegion -Region ${AWS::Region}\n" },
                            "New-Item -Path C:\\UserData -ItemType 'directory' -Force\n",
                            { "Fn::Sub": "Read-S3Object -BucketName USE_VARIABLE_REPLACEMENT -Key EC2UserData.ps1 -File C:\\UserData\\EC2UserData.ps1\n" },
                            { "Fn::Sub": "Read-S3Object -BucketName USE_VARIABLE_REPLACEMENT -Key wazuh-agent.msi -File C:\\UserData\\wazuh-agent.msi\n" },
                            "C:\\UserData\\EC2UserData.ps1\n",
                            "Stop-Transcript\n",
                            "</powershell>"
                        ]]
                    }
                }
            },
            "Metadata": {
                "AWS::CloudFormation::Designer": {
                    "id": "YOUR_DESIGNER_ID"
                }
            }
        }
    }
}

我在这里添加了两件事,我在 AWS 示例中看到的每个语句末尾的 \n,我认为您也在使用(Fn::Join 需要),以及从 AWS 包下载S3 存储桶。也许您有其他方式来下载 MSI,但我已经尝试过了,而且效果很好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多