标签: powershell

对于 Windows 和数据库服务器管理员来说,Vanilla Powershell 是否足够一门语言?

PowerShell 的全新安装本身是否具有足够的功能来管理 Windows 域环境和/或 SQL Server?

如果不是,什么是好的、免费的或付费的第三方附加组件?

windows powershell sql-server

8
推荐指数
1
解决办法
419
查看次数

在 PowerShell 脚本中使用 Diskpart 将不允许脚本重复使用驱动器号

我构建了一个脚本,该脚本使用Diskpart挂载(附加)VHD,清除一些系统文件,然后卸载(分离)它。它使用 foreach 循环,并假设使用相同的驱动器号清理多个 VHD。但是,在第一个 VHD 之后它失败了。我还注意到,当我尝试使用 diskpart 手动附加 VHD 时,diskpart 成功,磁盘管理器显示具有正确驱动器号的磁盘,但在同一个 PoSH 实例中,我无法连接(设置位置)到该驱动器。如果我在第一次打开 PoSH 时执行手动磁盘部分,我可以附加和分离我想要的所有内容,并且每次都能获得驱动器号。我需要做些什么来重置脚本中的 diskpart 吗?这是我正在使用的脚本片段。

function Mount-VHD {
         [CmdletBinding()]
         param (
                 [Parameter(Position=0,Mandatory=$true,ValueFromPipeline=$false)]
                         [string]$Path,
                 [Parameter(Position=1,Mandatory=$false,ValueFromPipeline=$false)]
                         [string]$DL,
                 [string]$DiskpartScript = "$env:SystemDrive\DiskpartScript.txt",
                 [switch]$Rescan
         )

         begin {
                 function InvokeDiskpart {
                         Diskpart.exe /s $DiskpartScript
                 }
                 ## Validate Operating System Version ##
                 if (Get-WmiObject win32_OperatingSystem -Filter "Version < '6.1'") {throw "The script operation requires at least Windows 7 or Windows Server 2008 R2."}
         }
         process{
                 ## Diskpart Script Content ## Here-String …
Run Code Online (Sandbox Code Playgroud)

scripting windows powershell vhd diskpart

8
推荐指数
1
解决办法
1358
查看次数

如何使用 Powershell 获取 Exchange 数据库中超过 2 年的电子邮件列表,按用户排序?

我们目前正在考虑归档电子邮件并修改我们的保留政策。最大的问题是(对于法律部门而言),我们想节省多远?目前我们的用户有一个巨大的邮箱限制,过去都可以按照他们认为合适的方式进行存档。所以我们有几百 GB 的数据不在 Exchange 数据库中,但我们可能最终会吸入存档数据库进行发现。我想做的是能够为法律团队量化如果我们回到 1 年、2 年、3 年等,那会是多少。

我在 TheDailyAdmin 找到了一个相当简单的 Powershell 脚本,它在大多数情况下都能满足我的需求,但它把它全部归为一堆。我希望能够看到结果,但按用户排序以知道 Sally 有 47MB 超过 2 年,Charles 有 190MB 超过 2 年,等等。

这是我运行的脚本:

get-mailboxdatabase | get-mailbox -resultsize unlimited | get-mailboxfolderstatistics -folderscope all -includeoldestandnewestitems | export-csv mailbox_stats.csv
Run Code Online (Sandbox Code Playgroud)

将它们全部归档很有效,但我不知道谁的电子邮件属于谁。我也专门在我的邮箱上运行它,但我不想在每个用户上手动运行它,因为这需要一段时间!我不是 Powershell 专家,但希望有人能更坚定地掌握并帮助我指出正确的命令方向,以帮助进一步分解它。

提前致谢!

powershell exchange-2010

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

如何使用 Powershell 更改 IIS 默认文档顺序?

如何确保default.aspx是我的 IIS 网站的第一个默认文档?

我试过了:

Add-WebConfiguration //defaultDocument/files "IIS:\sites\Default Web Site\MyWebSite" -atIndex 0 -Value @{value="Default.aspx"}
Run Code Online (Sandbox Code Playgroud)

但如果default.aspx已经在它抱怨的列表中

Add-WebConfiguration : Filename: 
Error: Cannot add duplicate collection entry of type 'add' with unique key attribute 'value' set to 'Default.aspx'
Run Code Online (Sandbox Code Playgroud)

如有必要,如何添加它并将其移至列表顶部(如果它尚未存在)?

iis powershell

8
推荐指数
1
解决办法
7415
查看次数

powershell:如何检查远程机器上是否启用了 SMART

我试图获取远程机器的磁盘信息,包括是否使用 win32_diskdrive 类在驱动器上启用了 SMART。

这比我想象的要棘手。虽然读取 status 属性很容易,但我在 Capabilities 属性中发现了一些有趣的东西——即表示“智能通知”是否可用的值。除非该命令在提升的安全上下文中运行,否则不会出现此值。因此,例如,如果我运行 (gwmi win32_diskdrive).Capabilities SMART 值 (10) 尚未出现在值数组中,如果我在提升的提示中运行它,它确实会出现。据我所知,您无法在提升的上下文中运行 winrm 会话(而且我对俗气的 schtasks hacks 或 psexec 不感兴趣)。

然后我尝试将 win32_diskdrive 映射到 MSStorageDriver_FailurePredictStatus 类。我想无论如何我都必须这样做,因为即使 SMART 出现在 Capabilities 属性中,也不一定意味着它已启用,对吗?

我正在将 win32_diskdrive 的 PNPDeviceID 属性映射到 MSStorageDriver_FailurePredictStatus 的 InstanceName 属性,但现在我的问题是我认为 InstanceName 属性不够独特,无法正常工作。例如,这是我的 InstanceName:IDE\DiskST3250312AS_____________________________JC47____\5&350bf0c3&0&0.0.0_0

它显示接口类型 (IDE) 型号 (ST3250312AS) 固件版本 (JC47) 我认为是某种唯一标识符 ( 5&350bf0c3&0&0.0.0) 然后看起来像索引号 (_0)。当我用谷歌搜索时,5&350bf0c3&0&0.0.0它会在驱动器上找到一些信息,所以我认为这个数字不是唯一的。这意味着唯一性存在于索引号中,该索引号未包含在 win32_diskdrive 类的 PNPDeviceID 属性中。这是一个问题,因为我们的许多服务器都有多个相同的磁盘。

我担心的是,这MSStorageDriver_FailurePredictStatus将代表多个磁盘,如下所示:

IDE\DiskST3250312AS_____________________________JC47____\5&350bf0c3&0&0.0.0_0
IDE\DiskST3250312AS_____________________________JC47____\5&350bf0c3&0&0.0.0_1
IDE\DiskST3250312AS_____________________________JC47____\5&350bf0c3&0&0.0.0_2
Run Code Online (Sandbox Code Playgroud)

而所有这些的 win32_diskdrive 的 PNPDeviceID 属性就是 IDE\DiskST3250312AS_____________________________JC47____\5&350bf0c3&0&0.0.0

如何MSStorageDriver_FailurePredictStatus通过远程会话可靠地将从 win32_diskdrive 检索到的对象映射到powershell 或以另一种方式执行此操作? …

powershell smart wmi winrm

8
推荐指数
1
解决办法
6098
查看次数

通过 PowerShell 自动化 WSUS

我编写了一个脚本,目的是快速管理WSUS进程,我有一些硬编码的东西,但更愿意使用 PowerShell。特别是 Approve-WsusUpdate 的“目标”组。

目前我正在做这样的事情:

#Select Target Group for Update Approval:

$TargetComputerGroups = "All Computers", "Unassigned Computers", "Clients", "Servers", "Test", "View Templates"

$UserPrompt = @"

Please select a Computer Group from the below options:

1) All Computers (Selects all of the below)
2) Unassigned Computers
3) Clients
4) Servers
5) Test
6) View Templates

Enter selection
"@

###Record user selection to varirable
$TargetComputerGroupTemp = Read-Host -Prompt $UserPrompt

###Convert their choice to the correct 0-index array value.
$TargetComputerIndex = …
Run Code Online (Sandbox Code Playgroud)

windows powershell wsus

7
推荐指数
1
解决办法
5856
查看次数

Windows Server Backup:列出目标上的备份

我需要通过脚本检索系统备份卷上的备份列表。单击“计划备份”部分中“目标使用情况”部分的“查看详细信息”后,可以在 WSB GUI 中找到我想要的信息:

备份的详细信息

我知道Get-WBBackupSet cmdlet,但这只是 WB 知道它过去所做的备份列表,不一定是备份目标上存在的内容,每次单击“刷新”时似乎都会动态重新读取信息”:

目的地使用

Windows Server Backup 如何收集目标信息?

理由:我想为 WB 执行的备份运行设置监控,以确保存在足够深的备份历史记录。由返回的备份集列表Get-WBBackupSet似乎并不总是与磁盘上的内容一致,因此我宁愿不依赖此信息进行监控检查。

powershell windows-server-2008-r2 windows-server-backup

7
推荐指数
1
解决办法
3768
查看次数

Powershell - 查找密码永不过期的所有用户

我希望通过 Powershell 查询 AD,以便查看我的林中所有密码设置为永不过期的用户帐户。

我使用快速谷歌搜索在网上找到了一些脚本,但它们似乎都没有按预期工作。然后我在 technet ( https://technet.microsoft.com/en-us/library/finding_users_whose_password_never_expires%28v=ws.10%29.aspx )上发现了以下内容,但是当我运行该行时:

Search-ADAccount -PasswordNeverExpires | FT Name,ObjectClass -A
Run Code Online (Sandbox Code Playgroud)

我只收到很少的结果,而且我知道返回的列表缺少大量我知道设置了此选项的用户。

请有人告诉我这个脚本有什么不正确或者结果集很小的原因是什么?

powershell active-directory windows-server-2008-r2

7
推荐指数
2
解决办法
8万
查看次数

通过 powershell 远程安装 .NET 4.6.1

我正在尝试在一大群机器上远程安装 .NET framework4.6.1。我正在使用 powershell 远程编写此脚本。问题是无论出于何种原因,.exe 似乎都不想被远程调用。我假设这是由于升级的 .exe 启动了 UI 会话。但是,即使传递应该允许远程安装的“/q”参数,它仍然不起作用。我没有收到任何错误,当 RDP 进入有问题的机器时,它似乎没有升级或使用任何 CPU 进行升级。

我的脚本:

        Write-Host "Executing 'Upgrade dotnet 4.6' for $server"
        Invoke-Command -ComputerName $servers -Credential $credentials -ScriptBlock {
        $Url = 'https://download.microsoft.com/download/E/4/1/E4173890-A24A-4936-9FC9-AF930FE3FA40/NDP461-KB3102436-x86-x64-AllOS-ENU.exe'
        $Exe = "net461.exe"
        $Dest = "C:\\" + $Exe
        $Params = " /q"
        $client = new-object System.Net.WebClient
        $client.DownloadFile($Url,$Dest) 
        Invoke-Expression ("cmd.exe /C " + $Dest + $Params)
        } 
Run Code Online (Sandbox Code Playgroud)

我也试过使用巧克力,但它也不起作用,因为我认为是同样的原因。在本地运行巧克力作品。

powershell remote .net

7
推荐指数
1
解决办法
9335
查看次数

Azure VM 更改操作系统磁盘

我已经在 RM 中创建了一个 Azure VM,并删除了 VM 和组件,除了高级存储帐户 (Blob) 中的 OSDisk。现在我想创建一个新的 VM 并将 OS 磁盘附加到新的 VM。

我尝试将 Set-AzureRmVmOsDisk 用于现有 VM。那行不通。我还尝试创建一个新的 VM 并修改 OSDisk。但有错误:

New-AzureRmVM : Changing property 'osDisk.name' is not allowed.
Run Code Online (Sandbox Code Playgroud)

关于如何创建新 VM 并将旧 VM 中的 OS .vhd 分配为新系统磁盘的任何想法?

编辑:我尝试了以下方法:

$VM = Get-AzureRmVM -Name "VM01" -ResourceGroupName "TestResource1"
Set-AzureRmVMOSDisk -VM $VM -Name "**VM123456**.vhd" -VhdUri "https://vm01disk.blob.core.windows
.net/vhds/**VM123456**.vhd" -CreateOption Attach
Run Code Online (Sandbox Code Playgroud)

输出显示:

 "osDisk": {
   "osType": null,
   "encryptionSettings": null,
   "name": "VM123456.vhd",
   "vhd": {
     "uri": "https://vm01disk.blob.core.windows.net/vhds/**VM123456**.vhd"
   },
Run Code Online (Sandbox Code Playgroud)

运行命令后:

Get-AzureRmVM -Name "VM01" -ResourceGroupName "TestResource1"
Run Code Online (Sandbox Code Playgroud)

再次,我可以看到:

"osDisk": {
  "osType": …
Run Code Online (Sandbox Code Playgroud)

powershell hard-drive virtual-machines azure

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