亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么用vbs確定腳本正在哪一個帳戶下運行

發布時間:2021-10-08 15:03:07 來源:億速云 閱讀:146 作者:小新 欄目:開發技術

這篇文章主要為大家展示了“怎么用vbs確定腳本正在哪一個帳戶下運行”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“怎么用vbs確定腳本正在哪一個帳戶下運行”這篇文章吧。

問:
如何確定腳本正在哪一個帳戶下運行?
答:
您知道,自從我們以各種托辭而開設這一專欄以來已有一段時間了,對于我們而言,這并非易事:畢竟,尋找托辭是我們這些腳本專家的拿手好戲。明確了這一點,那就讓我們以我們最喜歡的一個托辭開始吧:我們將向您介紹的腳本只在 Windows XP 和 Windows Server 2003 上有效。我們將向您介紹使得該腳本在 Windows 2000 上同樣有效的方法,但后者絕對不及前者好。
噢,是的:現在感覺該方法不錯。
好了,不找托辭了(至少是現在)。還是讓我們討論一下腳本吧。該腳本如下:

代碼如下:


strComputer = "." 
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") 
Set colProcessList = objWMIService.ExecQuery("Select * from Win32_Process Where " & _ 
    "Name = 'cscript.exe' or Name = 'wscript.exe'") 
For Each objProcess in colProcessList 
    If InStr(objProcess.CommandLine, "test.vbs") Then 
        colProperties =   objProcess.GetOwner(strNameOfUser,strUserDomain) 
        Wscript.Echo "This script is running under the account belonging to " _  
            & strUserDomain & "\" & strNameOfUser & "." 
    End If 
Next 


正如您所看到的那樣,雖然也可很容易地針對遠程計算機運行此腳本,但我們還是首先連接至本地計算機上的 WMI 服務。(是的,我們的確說過很多次這樣的話了。但這并不是托辭,而只是陳述事實:幾乎所有的 WMI 腳本針對遠程計算機的運行效果都與它們在本地計算機上的運行效果一樣好。我們確實時常在談論一些實質內容!) 
接下來我們遇到了下面這行代碼:

代碼如下:


Set colProcessList = objWMIService.ExecQuery("Select * from Win32_Process Where " & _ 
    "Name = 'cscript.exe' or Name = 'wscript.exe'") 


您可能已經猜到我們需要使用 Win32_Process 類來執行我們的任務,這是因為 Win32_Process 是用來跟蹤計算機上當前運行的所有進程的 WMI 類。當然,我們并不關心計算機上運行的所有進程,我們只關心腳本。正因如此,我們添加了一個 Where 子句,該子句將只返回以下兩個 Windows 腳本宿主的實例的信息:Cscript.exe 和 Wscript.exe。
注意:是的,我們本來可以以稍有不同的方式來編寫此腳本的,或許那樣會在進程中省下一兩行代碼。我們之所以選擇了此方法,是因為該方法與我們在 Windows 2000 上執行此任務的方法更相似。
發出查詢后,我們建立一個 For Each 循環,以遍歷返回的集合。在本例中,我們試圖確定名為 Test.vbs 的腳本的所有者。因此,我們需要檢查每個腳本,以查看它的名稱是否為 Test.vbs。我們如何去做呢?通過使用下面這行代碼:
If InStr(objProcess.CommandLine, "test.vbs") Then
我們此處要做的是使用 InStr 函數來確定是否可在屬性 CommandLine 中的某個位置找到字符串 test.vbs。什么是 CommandLine 屬性?簡單地說,它就是從命令提示符啟動腳本所需的命令字符串。例如,CommandLine 可能為下列內容:
C:\Scripts\Test Scripts\Test.vbs
由于我們假定不存在名為 MyTest.vbs 的腳本,因此我們將檢查 test.vbs。如果您擔心此類名稱沖突,那么,我們可以只使用 InStr 并針對類似 \test.vbs 的字符串進行測試。這是一個您必須決定的問題。
如果確實可以在 CommandLine 值中找到我們的目標字符串,則我們將調用 GetOwner 方法來找出進程的“所有者”(即,腳本在其下運行的帳戶的名稱):
objProcess.GetOwner(strNameOfUser,strUserDomain)
我們需要使用 GetOwner 傳遞一對“輸出參數”。輸出參數就是方法將用一個值對其進行填充的變量(由我們自己來命名該變量)。這里,我們將傳遞名為 strNameOfUser 和 strUserDomain 的變量。反過來,GetOwner 將用戶名稱和擁有進程的用戶所在的域賦值給這兩個變量。
此時我們所要做的就是回顯返回信息:
Wscript.Echo "This script is running under the account belonging to " _ 
    & strUserDomain & "\" & strNameOfUser & "."
那么,我們為何不能在 Windows 2000 上運行此腳本呢?實際上,有充分的理由來對此進行解釋:只有 Windows XP 和 Windows Server 2003 上才有 CommandLine 屬性。在其他版本的 Windows 上,我們無法標識各個腳本;最好的方法就是為恰好正在運行的 Cscript.exe 和 Wscript.exe 的所有實例返回所有者信息。如果只有一個腳本在運行,也同樣沒有問題:CScript.exe 或 Wscript.exe 的單個實例必須為該單個腳本。換句話說,這就意味著腳本宿主進程的所有者也是腳本進程的所有者。如果運行了多個腳本,則是另外一回事了。如果確實為此種情況,您最好是說:“嗯,Ken Myer 擁有其中的一個腳本,盡管我們不知道具體是哪一個。他未擁有的某個腳本恰好為 Pilar Ackerman 所擁有。
不,沒有那么好。不過事實就是這樣。(是的,這是一個托辭。盡管有點漏洞百出,但它仍是一個托辭。)
下面是 Windows 2000 解決方案(也可以說是:部分解決方案):

代碼如下:

strComputer = "." 
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") 
Set colProcessList = objWMIService.ExecQuery("Select * from Win32_Process Where " & _ 
    "Name = 'cscript.exe' or Name = 'wscript.exe'") 
For Each objProcess in colProcessList 
    objProcess.GetOwner strNameOfUser,strUserDomain 
    Wscript.Echo "A script is running under the account belonging to " _  
        & strUserDomain & "\" & strNameOfUser & "." 
Next 

以上是“怎么用vbs確定腳本正在哪一個帳戶下運行”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

vbs
AI

龙岩市| 梨树县| 尤溪县| 炎陵县| 瑞金市| 库伦旗| 揭阳市| 新民市| 五华县| 宁化县| 米脂县| 海林市| 青神县| 龙泉市| 竹山县| 轮台县| 乾安县| 宜都市| 贵州省| 盐津县| 宁强县| 中超| 闻喜县| 开封县| 张掖市| 阿勒泰市| 石嘴山市| 新民市| 五华县| 华安县| 阿城市| 烟台市| 长治县| 苍溪县| 孟津县| 鲜城| 云南省| 三明市| 宁河县| 南丹县| 丽水市|