我正在尝试确定 MS SQL 备份文件 (.bak) 是完整的还是差异的。
是否有捷径可寻?在powershell中这样做的一种方法?
这是我正在尝试做的存根:
function Set-test {
[CmdletBinding()]
param(
[Parameter(Mandatory=$True,
ValueFromPipeline=$True)]
[object[]]$inputObject
)
Write-Verbose "Set-test: input obj= $inputObject"
PROCESS {
foreach ($obj in $inputobject) {
Write-Output $obj
}
}
}
function Get-test {
$obj = New-Object PSObject
$obj | Add-Member -MemberType NoteProperty -Name "swName" -Value "banana"
$obj | Add-Member -MemberType NoteProperty -Name "Version" -Value "3.2.2"
Write-Output "obj = $obj"
$obj | Set-test -verbose
}
Run Code Online (Sandbox Code Playgroud)
这是输出:
PS > Get-test
obj = @{swName=banana; Version=3.2.2}
VERBOSE: Set-test: input obj=
Get-Process : Cannot evaluate parameter 'Name' because …Run Code Online (Sandbox Code Playgroud) 如何将副本与多个过滤器值一起使用?
例如,如果我只指定 1 个值来过滤 (*.jpg)
Copy-Item -Path Y:\TEST -Recurse -Filter *.jpg -Destination D:\Users\MS5253\Desktop\Lots
Run Code Online (Sandbox Code Playgroud)
这为我创建了一个仅包含 jpg 文件的文件夹 (D:\Users\MS5253\Desktop\Lots\TEST)
但我也想过滤 xml 文件,我试过这个:
Copy-Item -Path Y:\TEST -Recurse -Filter *.jpg,*.xml -Destination D:\Users\MS5253\Desktop\Lots
Run Code Online (Sandbox Code Playgroud)
它给了我一个错误。
和这个 : Copy-Item -Path Y:\TEST -Recurse -include "*.jpg","*.xml" -Destination D:\Users\MS5253\Desktop\Lots
它不起作用...
感谢您的帮助,我正在使用带有 Powershell v4 的 Windows 7。
目标:创建一个 for 或 foreach 循环来为 OU 中的每个用户执行一些代码(在本例中,只需打印 x)。我使用带有 ActiveDirectory 模块的 powershell 2.0。
到目前为止:这就是我所拥有的(见下文)。它只是为每个用户打印出 X。但它并没有像我想要的那样工作,相反,我认为它可能对每一行都这样做。所以我得到了 6 个 X,分别代表 'name'、'----'、'test1'、'test2'、SPACE、SPACE。
$pool = Get-ADUser -Filter * -SearchScope Subtree -SearchBase "OU=Test,OU=Users,OU=jack,DC=Corp,DC=jill,DC=com" -Properties name | FT name
foreach ($user in $pool )
{ write-host "x"}
$pool
Run Code Online (Sandbox Code Playgroud)
结果,SPACE 将用句点 (.) 表示:
x
x
x
x
x
x
name
----
test1
test2
.
.
Run Code Online (Sandbox Code Playgroud)
我不确定它为什么这样做。如果您有更好的方法或方法来处理这个问题,我会很高兴听到的。
在我们当前的工作流程中,我们必须将 RDP 连接到多个服务器才能知道服务是否正在运行。我们没有这些服务器的管理员权限,但可以查看、启动和停止服务。
我们想改用 Powershell Remoting。就像是
(1..8)|%{gsv -c "server$($_" -n "*ourservice*"}
Run Code Online (Sandbox Code Playgroud)
会更容易和更快地做到。
通过将我们的用户添加到WinRMRemoteWMIUsers组中,我是否正确
编辑
以下摘自 Secrects of Powershell Remoting 似乎解决了安全问题
powershellorg · PowerShell 远程处理的秘密
PowerShell 和 Remoting 都不是恶意软件的“后门”
这是一个重大的误解。请记住,默认情况下,PowerShell 不执行脚本。当它这样做时,它只能执行正在执行的用户有权运行的命令 - 它不会在超级特权帐户下执行任何操作,并且既不绕过现有权限也不绕过安全性。
和
底线:由于其工作方式,PowerShell Remoting 不允许任何用户(无论是否获得授权)执行他们通过其他十几种方式无法执行的任何操作
我在 Hyper-V 服务器上创建了 Vyatta 虚拟机,但我没有在该虚拟机上启用 ssh。我想在不启用 ssh 的情况下连接到该机器并使用 power shell 执行一些 shell 命令。有可能吗?除了 Hyper-V 控制台之外,还有什么方法可以访问该机器?
由于勒索软件攻击(没什么大不了的,都是从备份中恢复的)我想清理网络共享上的目录和子目录,攻击发生在那里创建了大量乱码文件。它们都归在受感染 PC 上工作的用户所有。
到目前为止,我最好的尝试是这样的:
Get-ChildItem Z:\ -Recurse | get-acl | where {($_.Owner -eq "DOMAIN\username")} | foreach { $_.Delete()}
Run Code Online (Sandbox Code Playgroud)
但它不起作用,因为get-acl不支持$_.Delete()
这$或者$_是不是我的问题,我认为。我确实有一些其他可能的命令。它们运行。
就像这里的这个:
Get-ChildItem -filter "~*.*" -path Z:\ -recurse | where {($_.LastWriteTime -lt (get-date).AddDays(-7))} | foreach { $_.Delete()}
Run Code Online (Sandbox Code Playgroud)
几天以来,我一直使用它来删除通过从备份中恢复文件而创建的文件,而这些文件是由未受恶意软件影响的备份文件创建的。我只是恢复了整个共享
但我会试一试。
关于您的其他提示,我必须解释一下,运行勒索软件的用户帐户在该网络驱动器上没有自行创建的文件。该用户的读取权限就足够了。
不幸的是,此共享对每个人都有更改访问权限。那是在早期,我们都与勒索软件没有太多关系。当然,等主要工作完成后,我会更改这些访问权限。
所以请我需要建议以删除此特殊帐户拥有的文件。
我需要更改服务帐户的 instanceType 属性。如果我尝试从 Active Directory 用户和计算机控制台更改它,它会变灰,如果我尝试使用 Set-Aduser 通过 powershell 更改它,我会收到“无法修改该属性,因为它归系统所有”。
任何人都对如何将 instanceType 属性从 4 更改为 0 有任何想法?
我在 PowerShell 中编写了一个登录脚本。该脚本嵌入在 GPO 中,并在用户登录域时运行。
我的问题是,我在脚本中部署的驱动器没有被部署。我确信登录脚本会运行,因为在脚本结束时我会向自己发送一封电子邮件,但我总是会收到它。所以运行脚本应该不是问题。$Error每次脚本运行时,我都会记录整个变量,但没有说明为什么会发生此错误。
我几乎可以肯定错误不在脚本本身中 - 我认为它必须是权限错误。
我认为当我-NoProfile在运行脚本时指定参数时可以解决这个问题,但我不知道将它放在 GPO 的哪个位置。由于美观原因,我不希望批处理文件调用脚本:-)。
编辑:指定-noprofile没有解决问题
编辑:由于有评论说没有足够的关于驱动器如何映射的信息,我将整个映射部分粘贴在下面:
# UserOU as a parameter, value set in GPO
Param([string]$UserOU)
# preparing some stuff...
Import-Module .\SecureStringFunctions.psm1
[Byte[]]$key = (1..16)
$pw = Get-Content .\LocalAdminCred.txt | ConvertTo-SecureString -key $key
# Tried this to elevate the Script IF it's needed. Didn't solve my problem. works only on PS 4.0 but didn't solve the issue on my 5.0 machine
if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator"))
{ Start-Process …Run Code Online (Sandbox Code Playgroud) 情况
在我们的组织中,我制作了一个 GPO 来创建计划任务。此任务在两个用户帐户登录时触发。
它执行一个 powershell 脚本来更改网络连接的 DNS 服务器。(为了阻止这些用户的一些网站,使用 dnsmasq。我知道这不是一个防弹解决方案,但它已经足够了。)
计划任务的操作是以下命令:
C:\Windows\System32\WindowsPowerShell\v1.0\Powershell.exe
这些是参数:
-ExecutionPolicy Bypass –NoProfile –Command "& {C:\ProgramData\ORGNAME\scripts\SetDNS.ps1}" > C:\ProgramData\ORGNAME\scripts\SetDNS.log
如您所见,输出被发送到日志文件。
这是脚本的内容:
$wmi = get-wmiobject Win32_NetworkAdapterConfiguration -filter "ipenabled = 'true'"
foreach($adapter in $wmi)
{
if($adapter.description -NotLike "*VMware*")
{
$adapter.SetDNSServerSearchOrder("XXX.XXX.XXX.XXX")
}
}
invoke-expression -command "c:\windows\system32\ipconfig /flushdns"
Run Code Online (Sandbox Code Playgroud)
问题
问题是这很好用,大约 10 次中有 9 次。当它不起作用时,任务调度程序仍然报告退出代码 0,但似乎脚本甚至没有开始执行,因为没有任何反应并且没有创建日志文件。
一些额外的信息
我尝试过的一些事情
我想也许是任务调度程序触发脚本太快了,有些事情可能还没有初始化,所以我尝试设置 30 秒的延迟。
每 5 分钟重新运行一次任务,持续 15 分钟。
任务失败时重新启动任务,这显然不起作用,因为 powershell.exe 似乎返回错误代码 0。
powershell ×10
windows ×3
attributes ×1
backup ×1
deleting ×1
filter ×1
group-policy ×1
hyper-v ×1
linux ×1
owner ×1
scripting ×1
security ×1
sql ×1
sql-server ×1
vyatta ×1