标签: powershell

PowerShell - 查找所有用户的组成员身份并将其踢出他们

正如标题所说,我必须找到用户所属的所有组,并从所有组中删除其成员资格。

我试过这个:

get-adgroup -filter * | where {(Get-ADGroupMember $_ | foreach {$_.PrimarySmtpAdress}) -contains "user1@domain.com"}
Run Code Online (Sandbox Code Playgroud)

但它不返回任何东西(虽然有一些必须返回的项目)

至于删除我发现没有办法做到这一点,有人可以给我一个执行此操作的代码示例吗?

我在谈论安全组。

powershell active-directory user-management organizational-unit

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

Powershell DISM 新 Windows 映像:使用 CompressionType 会出现错误

PS C:\ProgramData\Microsoft\Windows\Hyper-V\BigHomie> New-WindowsImage -CapturePath K: -ImagePath C:\VHDImports\Win764.wim -name "BigHomies Personal Image" -Verify -CompressionType "Max"
Run Code Online (Sandbox Code Playgroud)

抛出以下错误:

    New-WindowsImage : The given key was not present in the dictionary.
At line:1 char:1
+ New-WindowsImage -CapturePath K: -ImagePath C:\VHDImports\Win764.wim -name " ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [New-WindowsImage], KeyNotFoundException
    + FullyQualifiedErrorId : System.Collections.Generic.KeyNotFoundException,Microsoft.Dism.Commands.NewWindowsImageC
   ommand
Run Code Online (Sandbox Code Playgroud)

我会说在不带-CompressionType参数的情况下运行此命令会运行并提供一个未压缩的 .wim 文件。运行此瓦特/出给人一种说法的-CompressionType参数给出我需要提供类型的参数错误System.String。

Google 对这个特定错误几乎没有发现,这些错误似乎都不适用于我的情况,而且这些结果都与 powershell 发生的错误无关,更不用说这个特定的 cmdlet。

powershell disk-image wim dism windows-server-2012-r2

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

在 MDT 2013 中将 PowerShell 脚本作为应用程序运行

有没有办法让 powershell 脚本在应用程序列表下运行,这样当您从 MDT 映像安装时,您可以选择要运行的脚本?

我可以将脚本作为脚本很好地运行,但是我尝试过的每次尝试脚本都不会执行。

这就是我试图做到的,但他们不执行。(我链接到任务序列下的安装应用程序下的脚本。到目前为止,我得出的结论是 Microsoft 不允许 PowerShell 脚本以这种方式工作,而没有一些严重的黑客攻击。

在此处输入图片说明

编辑:

因此,在尝试了多种方法并进行了研究之后,这就是我现在所拥有的:

我正在尝试这个:

powershell -noexit "& "'\\SERVER.com\ImageDeploymentShare$\Scripts\script_tes_2t.ps1'
Run Code Online (Sandbox Code Playgroud)

工作目录是:

.\%SCRIPTROOT%
Run Code Online (Sandbox Code Playgroud)

但我得到了这个: 在此处输入图片说明

我在technet上看到过类似的帖子,但这肯定是极端的吗?

Filename RunPowerShell.cmd
Powershell -Command Set-ExecutionPolicy Unrestricted
Powershell.exe -file "%~dp0%1"
Powershell -Command Set-ExecutionPolicy AllSigned

Filename App1.ps1
Dir

Execute this with
[fulle_Path_if_needed\]RunPowerShell.cmd App1.ps1
Run Code Online (Sandbox Code Playgroud)

windows powershell mdt windows-server-2012-r2

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

如何检查 AD 用户名是否已被使用

预先感谢您的帮助。我在以下链接中找到了相关内容,但无法通过此处找到我正在寻找的解决方案。使用 Powershell 脚本检查域帐户的存在

我想要做的是从我正在运行的另一个脚本中已生成到 CSV 文件的列表中获取用户名。

获得这些用户名 (sAMAccountname) 后,我想检查该用户名是否已被使用。如果是,我希望它显示出来,也许通过 Echo,然后继续检查其他名称。如果不是,那么它应该只是继续检查其他名称。

这是我目前所拥有的。(请记住,我是一个完整的 Powershell 新手,我只是出于绝对需要才这样做)

Import-Module ActiveDirectory -ErrorAction Continue
$UserCSV = import-csv "\\fs1\DisasterRecovery\Source Controlled Items\WindowsPowerShell\Test scripts\Import Production Users\Users.csv"
$UserList = $UserCSV.sAMAccountname
foreach($User in $UserList)
{
if (Get-ADUser -Filter {sAMAccountname -eq $User} ) {
  # Exists
  #echo Already Exists
} else {
  SilentlyContinue
}
}
Run Code Online (Sandbox Code Playgroud)

powershell active-directory

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

设置 CMTrace 字体

可能有点远,但我想知道是否有人知道或可以推测一种更改CMTrace的默认字体的方法。它似乎使用了一些 Sans-Serif 字体。我想将其更改为任何等宽字体,以便 PowerShell(或控制台)的输出保持对齐。

windows powershell log-files logging sccm

5
推荐指数
0
解决办法
380
查看次数

如何使用 PowerShell 捕获异常

我收到此错误。

Get-WmiObject : The RPC server is unavailable. (Exception from HRESULT: 0x800706BA)
At F:\Code\powershell\network_shutdown\TurnNetworkOff.ps1:19 char:26
+             Get-WmiObject <<<<  -computername $computer Win32_NetworkAdapter -filter "AdapterTypeId
=0" | % {
    + CategoryInfo          : InvalidOperation: (:) [Get-WmiObject], COMException
    + FullyQualifiedErrorId : GetWMICOMException,Microsoft.PowerShell.Commands.GetWmiObjectCommand
Run Code Online (Sandbox Code Playgroud)

这是我的代码

#Define variables used in this script
$namespace = "root\WMI"

$array = @()
$exceptionarray = @()

$computerlist = Get-Content F:\Code\powershell\network_shutdown\computer-list.csv

foreach ($computer in $computerlist) 
{
    # Main Processing Section
    # Write-Host $computer
    if((Test-Connection -Cn $computer -BufferSize 16 -Count 1 -ea 0 -quiet)) …
Run Code Online (Sandbox Code Playgroud)

powershell logging

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

`Get-wmiobject win32_service` 的 64 位等价物是什么?

我正在使用powershell从多台计算机获取服务列表,以查看哪些使用管理员运行。

到目前为止,我有:

Get-wmiobject win32_service | Select -Property startName, Name, systemname

但在我看来,这只会涵盖 32 位服务。如何从Get-wmiobjectpowershell 中的命令获取完整的服务列表?

powershell service

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

如何在 Powershell 上递归创建组织单位?

我正在编写一个 Powershell 脚本,以将所有公司用户从 CSV 文件填充到 Active Directory。

该脚本使用 Powershell 命令New-ADUser,它应该知道,对于每个用户,添加它们的路径在哪里,例如:

"OU=IT Dept,OU=Users,DC=local,DC=contoso"
Run Code Online (Sandbox Code Playgroud)

问题是:这个 Active Directory 还没有任何用户,所以没有创建组织单位,每当我运行脚本时,如果路径不存在,则不会创建用户。

我已经查找了创建组织单位的命令,例如New-ADOrganizationalUnit或dsadd,但是它们不支持递归创建,例如

"OU=Helpdesk,OU=IT Dept,OU=Users,DC=local,DC=contoso"    
Run Code Online (Sandbox Code Playgroud)

如果

"OU=IT Dept,OU=Users,DC=local,DC=contoso"    
Run Code Online (Sandbox Code Playgroud)

还不存在。

有没有办法使用New-ADOrganizationalUnit做到这一点?

谢谢

powershell active-directory organizational-unit

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

使用电子邮件帐户和 Office 365 同步的帐户创建脚本中的竞争条件 - 除了时间延迟之外还有什么好方法可以解决?

我有一个用于创建新用户的 powershell 脚本。每年我们都会增加数百名实习生,因此自动化至关重要。HR 中有人运行脚本,因此脚本应该是万无一失的。

我在添加两个新功能时遇到了竞争条件,我想以比当前方法(睡眠 2 分钟)更可靠的方式解决它,该方法仍然间歇性地失败。

1) Office 365 许可证激活。Start-OnlineCoexistenceSync在尝试激活许可证之前,我使用该命令强制将 Office 365 与我们的本地 AD 同步。据我所知,没有办法检查同步的状态。所以我延迟了2分钟。在测试中这有效,但在生产中它间歇性地工作。我认为扩大等待会解决,但 2 分钟已经感觉很长。显然有时它比需要的时间长,我讨厌有不必要的延迟。

2) 发送欢迎电子邮件。创建帐户可能需要不同的时间(有时甚至完全失败),但我不想过度延迟脚本。

有关如何解决的任何建议?

powershell active-directory exchange-2010 microsoft-office-365

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

除非以前从浏览器访问过,否则 HTTPS 地址/域的 cUrl 会超时

我已经在这个问题上浪费了几天时间,希望它能激发某人的想法。

我正在使用 Powershell 脚本将多个系统集成在一起。我连接到的两个服务之一(托管 JIRA)可以从我的本地系统正常访问,但是从我的一个 VM 运行时脚本会失败。我偶然发现,如果我打开/刷新服务器上的浏览器以获取该主机的 HTTPS URL,那么脚本将能够在此后大约 20-30 秒内通过 HTTPS 访问 API。

当我远程访问服务器并从 powershell 控制台尝试此操作时,我收到超时错误。然后我验证了 cUrl 发生了相同的行为(下面包含详细输出)。使用该域刷新浏览器后,两者都可以在短时间内访问 HTTPS URL。在 SSL 协商之前的初始连接似乎超时。

代表 PoSH 命令:

Invoke-RestMethod -Method Get -Uri " https://MYDOMAIN.atlassian.net/rest/api/2/issue/PLPT-1?fields=key,id,status " -Headers @{"Authorization" = "Basic " + [System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes('USERNAME:PASSWORD'))}

代表 cUrl 命令:

curl.exe " https://MYDOMAIN.atlassian.net/rest/api/2/issue/PLPT-1?fields=key,id,status " -u "USERNAME:PASSWORD" -v -X GET

我在这方面做了很多挖掘,我很难过。我确实尝试使用 Wireshark 进行更深入的挖掘,但是我已经好几年没有使用数据包嗅探器了,而且我已经生疏了,不得不学习 UI。

故障排除:

以下是我在尝试隔离问题时能想到的问题/答案:

  • 是powershell吗?
    • 使用 cUrl 也会超时
  • 都是HTTPS吗?
    • https://google.com/ 没有超时工作正常
    • https://localhost/... 没有超时工作正常
  • 它是一个曾经通过浏览器访问过 JIRA 的系统吗?
    • 尽管从未访问过 JIRA,但我验证了我的家用桌面可以通过 PoSH 连接
  • 是主机、DC 还是操作系统?
    • 这是 Azure 中的 2008 …

powershell https curl jira

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