簡體   English   中英

在ASP.NET網站上顯示Powershell對象的值

[英]Display values from powershell objects on asp.net site

我被要求創建幾個與asp.net網站一起使用的PowerShell腳本。 但是,asp.net站點和C#一起對我來說是全新的領域。

搜索www我發現一些博客展示了如何運行.ps1腳本以及如何在文本框中顯示輸出。 這工作得很好,而且我還能夠將參數傳遞給測試腳本。

現在,我想對輸出進行更多格式化,以獲得更好,更“復雜”的UI。 我在Sapiens PowerShell Studio中創建了一個快速且骯臟的WPF表單,該表單如下所示:

WPF表格

它正在顯示以下WmiObject的值,這些值是我從舊的SCCM測試服務器中$SCCMinfo = Get-WmiObject -Namespace 'root\\SMS' -Class 'SMS_ProviderLocation' -ComputerName "6.6.5.5.4.4"

這是具有兩列的布局表。 左邊是帶有“靜態”文本的標簽,右邊是帶有$ SCCMinfo對象的實際值的標簽(例如: $labelGenusVal.Text = $SCCMinfo.__GENUS

如何使用asp.net表單實現相同目的? 我所能找到的就是如何在一個元素中顯示完整的輸出。

編輯:

我可以通過在.ps1中為所需的每個值實現寫輸出,然后在aspx.cs中對結果進行索引。

但是我發現這是一個非常丑陋的解決方案。 有沒有直接的方法可以從PowerShell腳本中檢索變量及其值? 我還嘗試了shell.Runspace.SessionStateProxy.PSVariable.GetValue("VarName"); shell.Runspace.SessionStateProxy.GetVariable("VarName"); 但他們總是返回null。

這是我當前的解決方案:

.aspx.cs

using System;
using System.Management.Automation;

namespace WPS_Test2
{
    public partial class SCCM_info : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }


        protected void ExecuteCode_Click(object sender, EventArgs e)
        {
            // Clean the Result TextBox
            //ResultBox.Text = string.Empty;

            // Initialize PowerShell engine
            var shell = PowerShell.Create();

            string pathToWPS = @"C:\Users\sudo\Desktop\WPS_projects\WPS_Test2\WPS_Test2\zzz_wps_scripts\SCCM_info.ps1";

            // Add the script to the PowerShell object
            shell.AddCommand(pathToWPS);

            // Add some arguments / params
            shell.AddParameter("sccm_server", SCCM_server.Text);


            // Execute the script
            var results = shell.Invoke();


            LabelSelectedSCCMsrv.Text = "selected SCCM server: " + SCCM_server.Text;

            var SCCMiGenus = results[0].ToString();
                labelGenusVal.Text = SCCMiGenus;

            var SCCMiClass = results[1].ToString();
                labelClassVal.Text = SCCMiClass;

            var SCCMiSuperclass = results[2].ToString();
                labelSuperclassVal.Text = SCCMiSuperclass;

            var SCCMiDynasty = results[3].ToString();
                labelDynastyVal.Text = SCCMiDynasty;

            var SCCMiRelpath= results[4].ToString();
                labelRelpathVal.Text = SCCMiRelpath;

            var SCCMiPropertyCount = results[5].ToString();
                labelPropertyCountVal.Text = SCCMiPropertyCount;

            var SCCMiDerivation = results[6].ToString();
                labelDerivationVal.Text = SCCMiDerivation;

            var SCCMiServer = results[7].ToString();
                labelServerVal.Text = SCCMiServer;

            var SCCMiNamespace = results[8].ToString();
                labelNamespaceVal.Text = SCCMiNamespace;

            var SCCMiPath = results[9].ToString();
                labelPathVal.Text = SCCMiPath;

            var SCCMiMachine = results[10].ToString();
                labelMachineVal.Text = SCCMiMachine;

            var SCCMiNamespacePath = results[11].ToString();
                labelNamespacePathVal.Text = SCCMiNamespacePath;

            var SCCMiProviderForLocalSite = results[12].ToString();
                labelProviderForLocalSiteVal.Text = SCCMiProviderForLocalSite;

            var SCCMiSiteCode = results[13].ToString();
                labelSiteCodeVal.Text = SCCMiSiteCode;

            var SCCMiPSComputerName = results[14].ToString();
                labelPSComputerNameVal.Text = SCCMiPSComputerName;
        }
    }
}

的.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="SCCM_info.aspx.cs" Inherits="WPS_Test2.SCCM_info" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <style type="text/css">
        .auto-style1 {
            width: 145px;
        }
        .auto-style2 {
            width: 145px;
            height: 23px;
        }
        .auto-style3 {
            height: 23px;
        }
    </style>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            SCCM Info</div>
        <div>
            <table style="width:100%;">
                <tr>
                    <td class="auto-style1">SCCM Server:</td>
                    <td>
                        <asp:TextBox ID="SCCM_server" runat="server" Width="248px"></asp:TextBox>
                        <asp:Button ID="Button1" runat="server" Text="Button"  OnClick="ExecuteCode_Click" />
                    </td>
                    <td>&nbsp;</td>
                </tr>
                <tr>
                    <td class="auto-style1">&nbsp;</td>
                    <td>
                        <asp:Label ID="LabelSelectedSCCMsrv" runat="server"></asp:Label>
                    </td>
                    <td>&nbsp;</td>
                </tr>
                <tr>
                    <td class="auto-style1">Genus</td>
                    <td>
                        <asp:Label ID="labelGenusVal" runat="server"></asp:Label>
                    </td>
                    <td>&nbsp;</td>
                </tr>
                <tr>
                    <td class="auto-style2">Class</td>
                    <td class="auto-style3">
                        <asp:Label ID="labelClassVal" runat="server"></asp:Label>
                    </td>
                    <td class="auto-style3"></td>
                </tr>
                <tr>
                    <td class="auto-style1">Superclass</td>
                    <td>
                        <asp:Label ID="labelSuperclassVal" runat="server"></asp:Label>
                    </td>
                    <td>&nbsp;</td>
                </tr>
                <tr>
                    <td class="auto-style1">
                        <asp:Label ID="Label13" runat="server" Text="Dynasty"></asp:Label>
                    </td>
                    <td>
                        <asp:Label ID="labelDynastyVal" runat="server"></asp:Label>
                    </td>
                    <td>&nbsp;</td>
                </tr>
                <tr>
                    <td class="auto-style2">
                        <asp:Label ID="Label14" runat="server" Text="Relpath"></asp:Label>
                    </td>
                    <td class="auto-style3">
                        <asp:Label ID="labelRelpathVal" runat="server"></asp:Label>
                    </td>
                    <td class="auto-style3"></td>
                </tr>
                <tr>
                    <td class="auto-style1">
                        <asp:Label ID="Label15" runat="server" Text="Property Count"></asp:Label>
                    </td>
                    <td>
                        <asp:Label ID="labelPropertyCountVal" runat="server"></asp:Label>
                    </td>
                    <td>&nbsp;</td>
                </tr>
                <tr>
                    <td class="auto-style1">
                        <asp:Label ID="Label16" runat="server" Text="Derivation"></asp:Label>
                    </td>
                    <td>
                        <asp:Label ID="labelDerivationVal" runat="server"></asp:Label>
                    </td>
                    <td>&nbsp;</td>
                </tr>
                <tr>
                    <td class="auto-style1">
                        <asp:Label ID="Label17" runat="server" Text="Server"></asp:Label>
                    </td>
                    <td>
                        <asp:Label ID="labelServerVal" runat="server"></asp:Label>
                    </td>
                    <td>&nbsp;</td>
                </tr>
                <tr>
                    <td class="auto-style1">
                        <asp:Label ID="Label18" runat="server" Text="Namespace"></asp:Label>
                    </td>
                    <td>
                        <asp:Label ID="labelNamespaceVal" runat="server"></asp:Label>
                    </td>
                    <td>&nbsp;</td>
                </tr>
                <tr>
                    <td class="auto-style1">
                        <asp:Label ID="Label19" runat="server" Text="Path"></asp:Label>
                    </td>
                    <td>
                        <asp:Label ID="labelPathVal" runat="server"></asp:Label>
                    </td>
                    <td>&nbsp;</td>
                </tr>
                <tr>
                    <td class="auto-style1">
                        <asp:Label ID="Label20" runat="server" Text="Machine"></asp:Label>
                    </td>
                    <td>
                        <asp:Label ID="labelMachineVal" runat="server"></asp:Label>
                    </td>
                    <td>&nbsp;</td>
                </tr>
                <tr>
                    <td class="auto-style1">
                        <asp:Label ID="Label21" runat="server" Text="Namespace Path"></asp:Label>
                    </td>
                    <td>
                        <asp:Label ID="labelNamespacePathVal" runat="server"></asp:Label>
                    </td>
                    <td>&nbsp;</td>
                </tr>
                <tr>
                    <td class="auto-style1">
                        <asp:Label ID="Label22" runat="server" Text="Provider for loca site"></asp:Label>
                    </td>
                    <td>
                        <asp:Label ID="labelProviderForLocalSiteVal" runat="server"></asp:Label>
                    </td>
                    <td>&nbsp;</td>
                </tr>
                <tr>
                    <td class="auto-style1">
                        <asp:Label ID="Label23" runat="server" Text="Site Code"></asp:Label>
                    </td>
                    <td>
                        <asp:Label ID="labelSiteCodeVal" runat="server"></asp:Label>
                    </td>
                    <td>&nbsp;</td>
                </tr>
                <tr>
                    <td class="auto-style1">
                        <asp:Label ID="Label24" runat="server" Text="PSComputerName"></asp:Label>
                    </td>
                    <td>
                        <asp:Label ID="labelPSComputerNameVal" runat="server"></asp:Label>
                    </td>
                    <td>&nbsp;</td>
                </tr>
            </table>
        </div>
    </form>
</body>
</html>

名為.ps1

param ([string]$sccm_server)


$SCCMinfo = Get-WmiObject -Namespace 'root\SMS' -Class 'SMS_ProviderLocation' -ComputerName $sccm_server

Write-Output $SCCMinfo.__GENUS
Write-Output $SCCMinfo.__CLASS
# Superclass is NULL in this example, adding a char to display output
# Write-Output $SCCMinfo.__SUPERCLASS
Write-Output "--"
Write-Output $SCCMinfo.__DYNASTY
Write-Output $SCCMinfo.__RELPATH
Write-Output $SCCMinfo.__PROPERTY_COUNT
# Derivation is {} in this example, adding a char to display output
# Write-Output $SCCMinfo.__DERIVATION
Write-Output "--"
Write-Output $SCCMinfo.__SERVER
Write-Output $SCCMinfo.__NAMESPACE
Write-Output $SCCMinfo.__PATH
Write-Output $SCCMinfo.Machine
Write-Output $SCCMinfo.NamespacePath
Write-Output $SCCMinfo.ProviderForLocalSite
Write-Output $SCCMinfo.SiteCode
Write-Output $SCCMinfo.PSComputerName

我終於能夠實現一個適當的解決方案。 如果您知道如何的話,這很簡單。

我為標簽使用了與結果相同的ID。成員名稱並使用額外的if語句遍歷它們,以將其文本設置為適當的值(如果不為null)。 在.ps1中,我只是返回所需的var(在這種情況下,只有$SCCMinfo

如果有更好的解決方案,我歡迎您提出建議。 畢竟我還在學習。

全部在一起:

名為.ps1

param ([string]$sccm_server)

$SCCMinfo = Get-WmiObject -Namespace 'root\SMS' -Class 'SMS_ProviderLocation' -ComputerName $sccm_server

return $SCCMinfo

.aspx.cs

using System;
using System.Management.Automation;
using System.Web.UI.WebControls;

namespace WPS_Test2
{
    public partial class SCCM_info : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }


        protected void ExecuteCode_Click(object sender, EventArgs e)
        {
            // Initialize PowerShell engine
            var shell = PowerShell.Create();

            // Attention: No not use spaces!!! Script may cause problems or wont work at all.
            string pathToWPS = @"C:\Users\sudo\Desktop\WPS_projects\WPS_Test2\WPS_Test2\zzz_wps_scripts\SCCM_info.ps1";

            // Add the script to the PowerShell object
            shell.AddCommand(pathToWPS);

            // Add some arguments / params
            shell.AddParameter("sccm_server", SCCM_server.Text);

            // Execute the script
            var results = shell.Invoke();

            LabelSelectedSCCMsrv.Text = "selected SCCM server: " + SCCM_server.Text;

            foreach (var name in results[0].Members)
            {
                if (FindControl("lbl" + name.Name) != null)
                {
                    // Find label with the same name as the current property and display the value
                    // Encode the string in HTML (prevent security issue with 'dangerous' caracters like < >
                    if (name.Value != null)
                    {
                        (FindControl("lbl" + name.Name) as Label).Text = Server.HtmlEncode(name.Value.ToString());
                    }
                }
            }
        }
    }
}

的.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="SCCM_info.aspx.cs" Inherits="WPS_Test2.SCCM_info" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <style type="text/css">
        .auto-style1 {
            width: 145px;
        }
        .auto-style2 {
            width: 145px;
            height: 23px;
        }
        .auto-style3 {
            height: 23px;
        }
    </style>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            SCCM Info</div>
        <div>
            <table style="width:100%;">
                <tr>
                    <td class="auto-style1">SCCM Server:</td>
                    <td>
                        <asp:TextBox ID="SCCM_server" runat="server" Width="248px"></asp:TextBox>
                        <asp:Button ID="Button1" runat="server" Text="Button"  OnClick="ExecuteCode_Click" />
                    </td>
                    <td>&nbsp;</td>
                </tr>
                <tr>
                    <td class="auto-style1">&nbsp;</td>
                    <td>
                        <asp:Label ID="LabelSelectedSCCMsrv" runat="server"></asp:Label>
                    </td>
                    <td>&nbsp;</td>
                </tr>
                <tr>
                    <td class="auto-style1">Genus</td>
                    <td>
                        <asp:Label ID="lbl__GENUS" runat="server"></asp:Label>
                    </td>
                    <td>&nbsp;</td>
                </tr>
                <tr>
                    <td class="auto-style2">Class</td>
                    <td class="auto-style3">
                        <asp:Label ID="lbl__CLASS" runat="server"></asp:Label>
                    </td>
                    <td class="auto-style3"></td>
                </tr>
                <tr>
                    <td class="auto-style1">Superclass</td>
                    <td>
                        <asp:Label ID="lbl__SUPERCLASS" runat="server"></asp:Label>
                    </td>
                    <td>&nbsp;</td>
                </tr>
                <tr>
                    <td class="auto-style1">
                        <asp:Label ID="Label13" runat="server" Text="Dynasty"></asp:Label>
                    </td>
                    <td>
                        <asp:Label ID="lbl__DYNASTY" runat="server"></asp:Label>
                    </td>
                    <td>&nbsp;</td>
                </tr>
                <tr>
                    <td class="auto-style2">
                        <asp:Label ID="Label14" runat="server" Text="Relpath"></asp:Label>
                    </td>
                    <td class="auto-style3">
                        <asp:Label ID="lbl__RELPATH" runat="server"></asp:Label>
                    </td>
                    <td class="auto-style3"></td>
                </tr>
                <tr>
                    <td class="auto-style1">
                        <asp:Label ID="Label15" runat="server" Text="Property Count"></asp:Label>
                    </td>
                    <td>
                        <asp:Label ID="lbl__PROPERTY_COUNT" runat="server"></asp:Label>
                    </td>
                    <td>&nbsp;</td>
                </tr>
                <tr>
                    <td class="auto-style1">
                        <asp:Label ID="Label16" runat="server" Text="Derivation"></asp:Label>
                    </td>
                    <td>
                        <asp:Label ID="lbl__DERIVATION" runat="server"></asp:Label>
                    </td>
                    <td>&nbsp;</td>
                </tr>
                <tr>
                    <td class="auto-style1">
                        <asp:Label ID="Label17" runat="server" Text="Server"></asp:Label>
                    </td>
                    <td>
                        <asp:Label ID="lbl__SERVER" runat="server"></asp:Label>
                    </td>
                    <td>&nbsp;</td>
                </tr>
                <tr>
                    <td class="auto-style1">
                        <asp:Label ID="Label18" runat="server" Text="Namespace"></asp:Label>
                    </td>
                    <td>
                        <asp:Label ID="lbl__NAMESPACE" runat="server"></asp:Label>
                    </td>
                    <td>&nbsp;</td>
                </tr>
                <tr>
                    <td class="auto-style1">
                        <asp:Label ID="Label19" runat="server" Text="Path"></asp:Label>
                    </td>
                    <td>
                        <asp:Label ID="lbl__PATH" runat="server"></asp:Label>
                    </td>
                    <td>&nbsp;</td>
                </tr>
                <tr>
                    <td class="auto-style1">
                        <asp:Label ID="Label20" runat="server" Text="Machine"></asp:Label>
                    </td>
                    <td>
                        <asp:Label ID="lblMachine" runat="server"></asp:Label>
                    </td>
                    <td>&nbsp;</td>
                </tr>
                <tr>
                    <td class="auto-style1">
                        <asp:Label ID="Label21" runat="server" Text="Namespace Path"></asp:Label>
                    </td>
                    <td>
                        <asp:Label ID="lblNamespacePath" runat="server"></asp:Label>
                    </td>
                    <td>&nbsp;</td>
                </tr>
                <tr>
                    <td class="auto-style2">
                        <asp:Label ID="Label22" runat="server" Text="Provider for local site"></asp:Label>
                    </td>
                    <td class="auto-style3">
                        <asp:Label ID="lblProviderForLocalSite" runat="server"></asp:Label>
                    </td>
                    <td class="auto-style3"></td>
                </tr>
                <tr>
                    <td class="auto-style1">
                        <asp:Label ID="Label23" runat="server" Text="Site Code"></asp:Label>
                    </td>
                    <td>
                        <asp:Label ID="lblSiteCode" runat="server"></asp:Label>
                    </td>
                    <td>&nbsp;</td>
                </tr>
                <tr>
                    <td class="auto-style1">
                        <asp:Label ID="Label24" runat="server" Text="PSComputerName"></asp:Label>
                    </td>
                    <td>
                        <asp:Label ID="lblPSComputerName" runat="server"></asp:Label>
                    </td>
                    <td>&nbsp;</td>
                </tr>
            </table>
        </div>
    </form>
</body>
</html>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM