我正在自动测试某些Windows应用程序的安装,检测和卸载。为了以静默方式运行大多数安装程序,它们必须以Sub multiplyRowsByCellValue()
Dim rangeInventory As Range
Dim rangeSingleCell As Range
Dim numberOfRepeats As Integer
Dim n As Integer
Dim lastRow As Long
'Set rangeInventory to all of the Inventory Data
Set rangeInventory = Sheets("Sheet1").Range("A2", Sheets("Sheet1").Range("D2").End(xlDown))
'Iterate each row of the Inventory Data
For Each rangeSingleCell In rangeInventory.Rows
'number of times to be repeated copied from Sheet1 column 4 ("C")
numberOfRepeats = rangeSingleCell.Cells(1, 3).Value
'check if numberOfRepeats is greater than 0
If numberOfRepeats > 0 Then
With Sheets("Sheet2")
'copy each invetory item in Sheet1 and paste "numberOfRepeat" times in Sheet2
For n = 1 To numberOfRepeats
lastRow = Sheets("Sheet1").Range("A1048576").End(xlUp).Row
r.Copy
Sheets("Sheet1").Range("A" & lastRow + 1).PasteSpecial xlPasteValues
Next
End With
End If
Next
End Sub
运行。通过调用nt authority\system
这样的东西,很容易在本地机器上完成:
psexec
我需要能够自动将测试目标计算机回滚到已知状态,所以我正在使用另一台计算机来协调所有这些。理想情况下,我可以使用PowerShell远程处理在目标计算机上启动安装程序。我还没有找到实现这一目标的方法。
最明显的事情是使用远程连接到目标计算机并调用psexec -s
。这是看起来像:
psexec -s setup.exe /S
问题是,这个过程只是暂停了。
[target.ad.example.com]: PS C:\Users\un1\Documents> C:\PsTools\PsExec.exe -s whoami
C:\PsTools\PsExec.exe :
+ CategoryInfo : NotSpecified: (:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
PsExec v2.11 - Execute processes remotely
Copyright (C) 2001-2014 Mark Russinovich
Sysinternals - www.sysinternals.com
Start-Process
将-Verb RunAs
动词与Start-Process
一起使用可能会提升一个进程,但似乎不会将其作为RunAs
运行:
WHOAMI到file.bat
nt authority\system
PowerShell会话
whoami > out.txt
该过程不以[target.ad.example.com]: PS C:\> Start-Process .\whoami-to-file.bat -Verb RunAs -WorkingDirectory
[target.ad.example.com]: PS C:\> Get-Contents out.txt
example\un1
启动。
是否可以通过PowerShell远程处理启动nt authority\system
进程?如果是这样,怎么样?
答案 0 :(得分:2)
注意:我不是Windows安全和凭据的专家,所以我不明白这种技术的确切安全含义。在我的情况下,唯一的凭证是那些临时测试计算机,所以没有太大的风险。我怀疑这种技术对于制作是一个好主意。
clymb3r's article关于CredSSP我认为解释了为什么psexec -s
无法通过PowerShell远程处理。 我认为 PowerShell远程处理计为一跳并且调用psexec -s
计为第二跳。如果是这种情况,我们会有the double-hop authentication problem.
我想有多种方法可以克服双跳问题。这是一个测试场景,CredSSP
似乎合适(beware the security risk)。这是概念证明。
首先,您必须在两台计算机上启用CredSSP:
PS C:\> Enable-WSManCredSSP Client -DelegateComputer target.ad.example.com
PS C:\> Invoke-Command { Enable-WSManCredSSP Server} -ComputerName target.ad.example.com
然后你可以使用CredSSP远程到目标:
PS C:\> $credential = Get-Credential example\target-admin
PS C:\> Enter-PSSession target.ad.example.com -Credential $credential -Authentication CredSSP
[target.ad.example.com]: PS C:\>
并且psexec -s
有效:
[target.ad.example.com]: PS C:\> psexec -s whoami
C:\PsTools\PsExec.exe :
+ CategoryInfo : NotSpecified: (:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
PsExec v2.11 - Execute processes remotely
Copyright (C) 2001-2014 Mark Russinovich
Sysinternals - www.sysinternals.com
Connecting to local system...Starting PSEXESVC service on local system...Connecting with PsExec service on
target...Starting whoami on target...
whoami exited on target with error code 0.
nt authority\system
答案 1 :(得分:0)
https://github.com/mkellerman/Invoke-CommandAs
针对本地/远程计算机,以系统或提供的凭据的功能使Invoke-Command成为可能。返回PSObject,处理网络中断并解决任何Double-Hop问题。
尝试一下,让我知道这是否可以解决您的问题。