PowerShell 的全新安装本身是否具有足够的功能来管理 Windows 域环境和/或 SQL Server?
如果不是,什么是好的、免费的或付费的第三方附加组件?
我构建了一个脚本,该脚本使用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) 我们目前正在考虑归档电子邮件并修改我们的保留政策。最大的问题是(对于法律部门而言),我们想节省多远?目前我们的用户有一个巨大的邮箱限制,过去都可以按照他们认为合适的方式进行存档。所以我们有几百 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 专家,但希望有人能更坚定地掌握并帮助我指出正确的命令方向,以帮助进一步分解它。
提前致谢!
如何确保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)
如有必要,如何添加它并将其移至列表顶部(如果它尚未存在)?
我试图获取远程机器的磁盘信息,包括是否使用 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 或以另一种方式执行此操作? …
我编写了一个脚本,目的是快速管理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) 我需要通过脚本检索系统备份卷上的备份列表。单击“计划备份”部分中“目标使用情况”部分的“查看详细信息”后,可以在 WSB GUI 中找到我想要的信息:
我知道Get-WBBackupSet cmdlet,但这只是 WB 知道它过去所做的备份列表,不一定是备份目标上存在的内容,每次单击“刷新”时似乎都会动态重新读取信息”:
Windows Server Backup 如何收集目标信息?
理由:我想为 WB 执行的备份运行设置监控,以确保存在足够深的备份历史记录。由返回的备份集列表Get-WBBackupSet似乎并不总是与磁盘上的内容一致,因此我宁愿不依赖此信息进行监控检查。
我希望通过 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)
我只收到很少的结果,而且我知道返回的列表缺少大量我知道设置了此选项的用户。
请有人告诉我这个脚本有什么不正确或者结果集很小的原因是什么?
我正在尝试在一大群机器上远程安装 .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)
我也试过使用巧克力,但它也不起作用,因为我认为是同样的原因。在本地运行巧克力作品。
我已经在 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 ×10
windows ×3
.net ×1
azure ×1
diskpart ×1
hard-drive ×1
iis ×1
remote ×1
scripting ×1
smart ×1
sql-server ×1
vhd ×1
winrm ×1
wmi ×1
wsus ×1