标签: powershell

测试 Enter-PSSession 是否成功

有没有办法测试 Enter-PSSession 是否成功或 Enable-Remoting 是否已为 true?我不需要能够进入机器本身,只是一种找出返回码的方法。基本上,只需检查是否可以远程连接到计算机,或者计算机是否仍然需要启用远程连接。

windows powershell

5
推荐指数
1
解决办法
2万
查看次数

如何强制powershell刷新缓存数据?PSDrive 的 Get-ChildItem 结果不是最新的

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清除它的缓存,或者任何保存不正确信息的东西......

显示 Get-ChildItem 如何不使用新的 PID 进行更新。

更新 需要明确的是,我的问题是如何在使用 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)

iis powershell

5
推荐指数
1
解决办法
2万
查看次数

Windows 8.1 Hyper-V 网络适配器设置为公共且不会保存为私有

我有一组运行 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)

但是,这些脚本在计算机正常运行期间有效,但当计算机重新启动时,身份不明的网络将恢复为公共网络。

为什么要重置?如何才能让脚本化的更改持续存在? …

powershell windows-8.1

5
推荐指数
1
解决办法
5522
查看次数

如何根据事件日志中报告的卷名称识别 WMI 中的卷?

我的 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

5
推荐指数
1
解决办法
8063
查看次数

我能否找到使用 WMI 或 Powershell 执行的 DCOM 应用程序的路径?

我在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)

powershell dcom wmi windows-server-2008-r2

5
推荐指数
1
解决办法
7608
查看次数

获取 AD 组成员 - 不同域

我的任务是导出几个 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 …

powershell active-directory powershell-v3.0 powershell-v4.0

5
推荐指数
1
解决办法
2万
查看次数

检查服务帐号是否具有登录交互权限

我想循环遍历我的所有域服务帐户,并确保人们无法使用该帐户登录服务器。

如何检查服务帐户是否具有交互式登录权限和/或远程登录权限?

它们不是托管服务帐户,因为它们在多个服务器上用作服务帐户。

我尝试过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)

最后两个是允许该用户登录服务器的吗?

或者是否有我可以使用命令行检查和查找的组策略?

powershell active-directory

5
推荐指数
1
解决办法
4万
查看次数

如何在 xWebApplication DSC 资源中使用 AuthenticationInfo

我的 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)

我应该如何设置这个属性?

powershell dsc

5
推荐指数
1
解决办法
682
查看次数

Powershell 无法从 Active Directory 检索 pwdLastSet

有人可以发现尝试从某些用户的 Active Directory 中提取 pwdLastSet 的 Powershell 命令中的错误吗?

\n\n

对于某些帐户,它有效:

\n\n
PS C:\\> get-aduser -filter "name -like \'Admin*\'" -Properties pwdLastSet | Select -first 1 name,pwdLastSet  | format-list\n\nname       : Administrator\npwdLastSet : 131254235816382539\n
Run Code Online (Sandbox Code Playgroud)\n\n

对于某些人来说则不然:

\n\n
PS 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 :\n
Run Code Online (Sandbox Code Playgroud)\n\n

需要注意的是,该属性似乎是在从 GUI 检索时设置的:\n同一用户的属性对话框

\n\n

该问题始终影响多个帐户,因此我怀疑有些东西我根本不明白。

\n

powershell active-directory

5
推荐指数
1
解决办法
6433
查看次数

Powershell:设置 AD DS 对象的所有者失败

我想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 …

powershell active-directory access-control-list

5
推荐指数
1
解决办法
5396
查看次数