如何在C ++中执行powershell脚本?

时间:2016-06-23 15:04:48

标签: c++ powershell

整个计划的要点:

传递用户名和密码以提升用户的权限,这样如果他们不是允许访问受保护文件夹的用户,他们仍然可以打开并查看它。用户名映射到<map>,其中包含其文件夹的密钥,它会搜索其文件夹,然后将其与用户名和密码一起传递,以便在以下powershell脚本中进行真正的提升:

param(
    [string]$username,
    [string]$password, 
    [string]$folder 
    )
    Write-Host $username $password $folder
 
    $securePassword = ConvertTo-SecureString $password -AsPlainText -Force
    $credential = New-Object System.Management.Automation.PSCredential $username, $securePassword
    Start-Process T:\folders\Explorer++\Explorer++.exe \\foo\boo\fileserver\allusers\specialUsers\$folder -Credential $credential

我通过使用System()将用户名,密码和文件夹传递到此脚本中。

执行脚本和传入变量的c ++代码如下所示:

  String^ runCommand(string folder, string username, string password)
    {
        string explorerpp = "\\\\foo\\boo\\examplefolder\\Explorer++\\EXPLORER++.exe";
        string space = "  ";
        string quote = "\"";
        string start = "C:\\ProgramData\\Microsoft\Windows\\Start Menu\\Programs\\System Tools\\Windows Powershell";
        string open = "open";
        string domain = "domain\\";
        string pwShell = "S:\\foo\\boo\\locationofscript\\pwShell.ps1 ";
        string parentFolder = """\\\\foo\\boo\\folder\\Parent_folder\\special_users \\""";
        string path = parentFolder + folder;
        String^ dir = gcnew String(path.c_str());
        string param = quote + domain+ username + quote +  space + quote + password + quote + space + quote  + folder + quote;
        string command = "start powershell.exe" + space + pwShell + param;          
        system(command.c_str());
        return dir;
    }

注意:由于大量的调试,代码看起来就像它一样,我知道我可能正在使用很多不需要的变量。

当浏览System()_popen时,它会在命令提示符下打开包含脚本或错误的.txt。

如果我采用了string command的值并将其粘贴到命令提示符中,我将使脚本正确运行,然后打开正确的文件夹。

当命令提示符正确执行所有内容时,C ++不允许脚本正确执行的问题是什么?

BIG EDIT:

我得到的错误是C:\OurProj\pwShell.ps1 : File C:\OurProj\pwshell.ps1 cannot be loaded because running scripts is disabled on this system.

我刚刚与IT人员交谈,我能够在这个系统上运行脚本,尝试将所有内容都设置为本地,如果我通过powershell运行脚本,它就可以工作。

编辑2:

我已经按照建议更改了执行策略,它确实返回RemoteSigned,但是当代码在C ++中执行时,我仍然被告知我禁用了脚本。

1 个答案:

答案 0 :(得分:0)

在一个环境中,您可以执行未签名的power shell脚本,但在另一个环境中则不能执行。 64位和32位每个都有一个单独的power shell执行策略。很可能你是在64位操作系统上运行并构建一个32位C ++程序(visual studio默认)。

您可以通过执行以下操作来获得32位电源外壳:

在“开始”屏幕上,键入 Windows PowerShell(x86)。以管理员身份运行。

接下来运行命令:

Set-ExecutionPolicy RemoteSigned

现在,您应该能够在计算机上的32位环境中运行未签名的本地电源脚本文件。

从开始菜单中,您可以访问PowerShell环境,确保使用以下命令为两者设置相同的执行策略:

Get-ExecutionPolicy