有没有办法测试 Enter-PSSession 是否成功或 Enable-Remoting 是否已为 true?我不需要能够进入机器本身,只是一种找出返回码的方法。基本上,只需检查是否可以远程连接到计算机,或者计算机是否仍然需要启用远程连接。
Import-Module WebAdministration
$pool = "ChannelServices"
$wp = Get-ChildItem "IIS:\AppPools\$pool\WorkerProcesses"
Get-Process -Id $wp.processId
Restart-WebAppPool $pool
sleep 5
Get-ChildItem "IIS:\AppPools\$pool\WorkerProcesses"
Get-Process -Id $wp.processId
Run Code Online (Sandbox Code Playgroud)
因此,当我为特定 AppPool 的 WorkerProcesses 执行 Get-ChildItem,然后重新启动该 AppPool 时,我应该获得一个新的 PID,我确实这么做了。但是,重新运行 Get-ChildItem 仍显示旧的 PID。如果我关闭 Powershell 并重新打开,它将不会显示正确的新 PID。
我怎样才能强制Powershell清除它的缓存,或者任何保存不正确信息的东西......

更新 需要明确的是,我的问题是如何在使用 IIS PSDrive 时清除本地缓存。
我注意到 TypeName:Microsoft.IIs.PowerShell.Framework.ConfigurationElement#workerProcesses#workerProcess
有一个方法: Name MemberType Definition
---- ---------- ----------
ClearLocalData Method void ClearLocalData()
但它对我来说并没有真正起作用......就像下面的人所说,这可能只是一个错误。
我在下面看到了有关如何使用我所知道的 WMI 的答案。
@theJasonHelmick 提供了一个很好的:
GWMI win32_process -filter "name='w3wp.exe'" | Select Name, ProcessId, @{n='AppPool';e={$_.GetOwner().user}}
Run Code Online (Sandbox Code Playgroud)
这为我提供了运行 AppPool 的用户名。我对此进行了一些修改,以从命令行中提取实际的应用程序池名称:
Get-WmiObject -Class win32_process -filter "name='w3wp.exe'" | Select …Run Code Online (Sandbox Code Playgroud) 我有一组运行 Hyper-V 进行单元测试的 Windows 8.1 计算机。我们经常使用 PowerShell 编写对这些系统的更改脚本,以简化我们的管理。但是,我们在这些计算机上启用 powershell 远程处理时遇到了问题。
我们在这些机器上运行以下命令来尝试启用 powershell 远程处理
启用-PSRemoting-force
但我们总是遇到以下错误:
WinRM 防火墙例外将不起作用,因为该计算机上的网络连接类型之一设置为“公共”。将网络连接类型更改为域或专用,然后重试。
网络适配器如下:
Name : Network 2
InterfaceAlias : vEthernet (Broadcom NetXtreme Gigabit Ethernet)
InterfaceIndex : 13
NetworkCategory : Private
IPv4Connectivity : Internet
IPv6Connectivity : LocalNetwork
Name : Unidentified network
InterfaceAlias : vEthernet (Windows Phone Emulator Internal Switch)
InterfaceIndex : 10
NetworkCategory : Public
IPv4Connectivity : NoTraffic
IPv6Connectivity : NoTraffic
Run Code Online (Sandbox Code Playgroud)
我尝试运行以下脚本将未识别的网络设置为私有
Set-NetConnectionProfile -name "Network 2" -NetworkCategory private
Set-NetConnectionProfile -name "Unidentified Network" -NetworkCategory private
Run Code Online (Sandbox Code Playgroud)
但是,这些脚本在计算机正常运行期间有效,但当计算机重新启动时,身份不明的网络将恢复为公共网络。
为什么要重置?如何才能让脚本化的更改持续存在? …
我的 Windows 2008R2 服务器报告以下错误:
磁盘上的文件系统结构已损坏且无法使用。请在卷\Device\HarddiskVolume2上运行 chkdsk 实用程序。
使用 Powershell 和 WMI 在查询时如何识别这是哪个卷Win32_Volume。
例如,如果我这样做:
Get-WmiObject Win32_Volume
Run Code Online (Sandbox Code Playgroud)
我得到了服务器上所有卷的列表,但是没有一个Win32_Volume类属性使用(看起来是)这个“友好”名称 - \Device\HarddiskVolume2。我可以看到有一个DeviceID属性返回如下值:
DeviceID : \\?\Volume{4bc3df2a-65c7-11e0-9c33-806e6f6e6963}\
Run Code Online (Sandbox Code Playgroud)
还有一个Name属性,但这只是分配给卷的驱动器号。其他属性的值都与事件日志中报告的值相差甚远。
fltmc volumes我知道我可以解析或 的输出来DISKPART获取此信息,但必须有一种方法可以在 PowerShell 脚本中使用 WMI 来获取此信息。
我还查看了Win32_DiskDrive,Win32_DiskPartition和Win32_LogicalDisk类,但没有提到类似的属性值\Device\HarddiskVolume2。
windows powershell diskmanagement wmi windows-server-2008-r2
我在W2K8R2机器上安装(并注册)了一个 DCOM 应用程序,其 GUID 可以在 dcomcnfg 显示的 DCOM 列表中找到。
我还可以使用 Powershell 查找其 GUID 的Win32_DCOMApplication或Win32_DCOMApplicationSetting对象:
PS C:\Windows\system32> Get-WMIObject Win32_DCOMApplicationSetting -Filter "AppID='{1CECFD4D-2CFB-4626-95C7-0266C26960FA
}'"
__GENUS : 2
__CLASS : Win32_DCOMApplicationSetting
__SUPERCLASS : Win32_COMSetting
__DYNASTY : CIM_Setting
__RELPATH : Win32_DCOMApplicationSetting.AppID="{1CECFD4D-2CFB-4626-95C7-0266C26960FA}"
__PROPERTY_COUNT : 12
__DERIVATION : {Win32_COMSetting, CIM_Setting}
__SERVER : MYSRV
__NAMESPACE : root\cimv2
__PATH : \\MYSRV\root\cimv2:Win32_DCOMApplicationSetting.AppID="{1CECFD4D-2CFB-4626-95C7-0266C269
60FA}"
AppID : {1CECFD4D-2CFB-4626-95C7-0266C26960FA}
AuthenticationLevel :
Caption :
CustomSurrogate :
Description :
EnableAtStorageActivation : False
LocalService :
RemoteServerName :
RunAsUser :
ServiceParameters :
SettingID …Run Code Online (Sandbox Code Playgroud) 我的任务是导出几个 AD 组的成员.csv,我过去总是使用Get-ADGroupMemberpowershell 中的命令导出这些组的成员,指定组名称,选择我需要的属性,然后使用export-csv.
我似乎遇到了一个组的问题,尽管这似乎与 AD 组的成员属于不同林中的外部域这一事实有关。本质上我运行下面的命令,但输出文件显示为空白。
Get-ADGroupMember -identity "VPN Users" | select name | Export-csv -path c:\vpnuserslist.csv -NoTypeInformation
Run Code Online (Sandbox Code Playgroud)
输出如下:
PS C:\Windows> Get-ADGroupMember -identity "VPN Users" | select name | Export-Csv -Path c:\vpnuserstest.csv -NoTypeInformation
Get-ADGroupMember : The operation completed successfully
At line:1 char:18
+ Get-ADGroupMember <<<< -identity "VPN Users" | select name | Export-Csv -Path c:\vpnuserstest.csv -NoTypeInformation
+ CategoryInfo : NotSpecified: (VPN Users:ADGroup) [Get-ADGroupMember], ADException
+ FullyQualifiedErrorId : The operation completed successfully,Microsoft.ActiveDirectory.Management.Commands.GetADGroupMember
Run Code Online (Sandbox Code Playgroud)
我还注意到,当转到 Active …
我想循环遍历我的所有域服务帐户,并确保人们无法使用该帐户登录服务器。
如何检查服务帐户是否具有交互式登录权限和/或远程登录权限?
它们不是托管服务帐户,因为它们在多个服务器上用作服务帐户。
我尝试过gpresult /s myservername /user myusername /h gpreport.html,但我不太理解该报告。
有一个部分包含:
Security Group Membership when Group Policy was applied
MYDOMAIN\Domain Users
Everyone
BUILTIN\Users
BUILTIN\Administrators
NT AUTHORITY\REMOTE INTERACTIVE LOGON
NT AUTHORITY\INTERACTIVE
Run Code Online (Sandbox Code Playgroud)
最后两个是允许该用户登录服务器的吗?
或者是否有我可以使用命令行检查和查找的组策略?
我的 DSC 配置中有以下内容:
xWebApplication StaffDirectoryApp {
Website = "MySite"
Name = "MyApp"
WebAppPool = "MyPool"
PhysicalPath = $Destination
Ensure = "Present"
PreloadEnabled = $true
}
Run Code Online (Sandbox Code Playgroud)
这似乎工作正常,但我还想使用 AuthenticationInfo 属性(尽管文档似乎说它应该是 AuthenticationInformation,但事实并非如此)。
我能找到的唯一例子是 GitHub 上的一个单元测试,它们的用法是这样的:
AuthenticationInfo = New-CimInstance -ClassName MSFT_xWebApplicationAuthenticationInformation `
-ClientOnly `
-Property @{ Anonymous = $false; Basic = $false; Digest = $false; Windows = $true }
Run Code Online (Sandbox Code Playgroud)
然而,这会产生以下结果:
Convert property 'AuthenticationInfo' value from type 'STRING' to type 'INSTANCE' failed
Run Code Online (Sandbox Code Playgroud)
我应该如何设置这个属性?
有人可以发现尝试从某些用户的 Active Directory 中提取 pwdLastSet 的 Powershell 命令中的错误吗?
\n\n对于某些帐户,它有效:
\n\nPS C:\\> get-aduser -filter "name -like \'Admin*\'" -Properties pwdLastSet | Select -first 1 name,pwdLastSet | format-list\n\nname : Administrator\npwdLastSet : 131254235816382539\nRun Code Online (Sandbox Code Playgroud)\n\n对于某些人来说则不然:
\n\nPS C:\\> get-aduser -filter "name -like \'G*Ol*\'" -Properties pwdLastSet | Select -first 1 name,pwdLastSet | format-list\n\n\nname : Grzegorz Ol\xc4\x99dzki\npwdLastSet :\nRun Code Online (Sandbox Code Playgroud)\n\n\n\n该问题始终影响多个帐户,因此我怀疑有些东西我根本不明白。
\n我想Set-ACL在 AD DS 对象1上运行 a ,并将“域管理员”设置为我构建的 ACL 对象中的所有者。代码基本上看起来像这样2:
Function SetDSAcl {
Param (
[Microsoft.ActiveDirectory.Management.ADObject]$targetObject # target object
)
$targetACL = Get-Acl "AD:\$($targetObject.DistinguishedName)"
# [some voodoo to get the values for my new ACE]
# Create a new AccessRule using the object constructor
# $newAce = New-Object System.DirectoryServices.ActiveDirectoryAccessRule([...])
# Add the generated ACE to target's ACL
$targetAcl.AddAccessRule($newAce)
# Persist the changed ACL to the object
Set-ACL -AclObject $targetAcl "AD:\$($targetObject.DistinguishedName)"
}
Run Code Online (Sandbox Code Playgroud)
但是,当代码在 Server 2008 …