我有一个我写的VBScript需要从MSI文件执行.当我在Windows中独立运行脚本时,脚本会正确执行,但是,当我从安装程序运行它时,我会收到以下错误,如日志文件中所示:
Microsoft VBScript runtime error: object required: 'WScript', Line 3, Column 2
Run Code Online (Sandbox Code Playgroud)
脚本如下:
sub shell(cmd)
Set objShell = WScript.CreateObject("WScript.Shell")
objShell.Run("""" & cmd & """")
Set objShell = Nothing
end sub
set objFSO = CreateObject("Scripting.FileSystemObject")
strcmd32 = "C:\Path\PathToExecutable.exe"
strcmd64 = "C:\Path\PathToExecutable64.exe"
if (objFSO.FileExists(strcmd32)) then
shell(strcmd32)
else
shell(strcmd64)
end if
set objFSO = Nothing
Run Code Online (Sandbox Code Playgroud)
如前所述,如果我在安装程序的上下文之外运行它,则此脚本运行正常.安装项目类型是VS2010安装和部署包(这是客户希望使用的,我不能使用任何其他东西).有任何想法吗?
我有一个CSV格式的日志,我们写了一些日志记录操作.但是,其中一个字段允许用户输入,我需要确保如果他们在字段中输入我们解析它的逗号并将其替换为某些东西,例如,Excel将能够读取并在其中显示逗号放置(因此csv读者不会认为它是列的结尾).
目前我替换了逗号,,但这在Excel中显示为文字字符串.
是否有标准方法在不使用实际逗号字符的情况下在CSV文件中显示逗号?即使只适用于excel的解决方案也可以使用,因为我们的大多数客户都将使用Excel来查看此文件.
@ECHO OFF
DFC.EXE get /isfrozen
IF Errorlevel 1 GOTO Frozen
IF Errorlevel 0 GOTO Thawed
:Frozen
Echo Errorlevel 1 Computer is Frozen, Thawing Now
DFC.EXE fakepassword123 /BOOTTHAWED
Echo
Goto END
:Thawed
Echo Errorlevel 0 Computer is Not Frozen
Echo
Goto END
:END
Exit
Run Code Online (Sandbox Code Playgroud)
我正在尝试运行一个非常简单的批处理文件,但如果有人要编辑密码,我不希望以纯文本形式存储密码。
现在 DFC.exe 密码行是存储密码的地方。
有没有办法将此密码隐藏在另一个文件中并从那里调用它?
我有一个项目在工作,我们使用Subversion版本控制一切.但是,我们有一个特定项目的客户端,他使用Git来检查并放入我们的项目存储库.通常我会查看Git仓库,将其导出到我的SVN工作副本,版本文件,并完成它.然而,这家伙经常更新这个代码,我需要留在他所在的地方附近.
如果我只是将Git存储库检入我的SVN工作副本并对文件进行版本化会发生什么?
注意 Git-svn不是一个选项,我从来没有使用它,不幸的是我没有时间学习新的东西.
我在C#代码中有一个函数,其中定期抛出NullReferenceException(预期行为),但是被捕获.有没有办法告诉Visual Studio调试器不要在我的代码的这个特定部分中断这个异常?
编辑我需要在我的代码中的其他地方打破这个异常,但不是在同一个函数中.
我正在帮助用户解决这个问题,链接到我的答案:Powershell脚本只使用电子邮件地址从.csv添加用户到A/D组?
最初我按如下方式编写脚本,使用基于括号的过滤器,Get-AdUser如下所示:
Import-CSV "C:\users\Balbahagw\desktop\test1.csv" |
Foreach-Object {
# Here, $_.EmailAddress refused to resolve
$aduser = Get-ADUser -Filter { EmailAddress -eq $_.EmailAddress }
if( $aduser ) {
Write-Output "Adding user $($aduser.SamAccountName) to groupname"
Add-ADGroupMember -Identity groupname -Members $aduser
} else {
Write-Warning "Could not find user in AD with email address $($_.EmailAddress)"
}
}
Run Code Online (Sandbox Code Playgroud)
但是,$_.EmailAddress未能填充值.但是,将Get-ADUser过滤器更改为基于字符串的过滤器按预期工作:
$aduser = Get-ADUser -Filter "EmailAddress -eq '$($_.EmailAddress)'"
我遇到的奇怪是什么,为什么?是因为当我使用括号时,它被视为一个新范围而$PSItem不会遵循?
如果您尝试使用Invoke-Expressioncmdlet,则有9/10次,有更好的方法.动态构建命令的参数?使用参数数组.构建cmdlet的参数?使用splatting与数组或哈希表.你的命令在它的路径中有空格?使用call运算符(&).
这似乎是开放式的,但它Invoke-Expression是一个易于访问的cmdlet,答案几乎总是永远不会使用它.但是cmdlet存在是有原因的,并没有被弃用,并且大多数批评它的使用状态类似于"它几乎从来都不是正确的答案",但从未说明何时可以使用它.在什么情况下可以使用Invoke-Expression?或者说它不那么公开,如何Invoke-Expression设计使用?
考虑以下哈希表:
$table = @{
6 = '10.11.12.13', '10.11.12.14'
15 = 'domain.tld'
NameServers = '10.11.12.13', '10.11.12.14'
}
Run Code Online (Sandbox Code Playgroud)
通常,当您有哈希表时,您可以引用.键名称以更加面向对象的方式使用它,而不是使用数组访问器语法[key]。例如,调用NameServers上面哈希表上的键并.返回值,我可以按预期使用该属性值的成员:
$table.NameServers # ========> 10.11.12.13
# ========> 10.11.12.14
$table.NameServers.Count # ========> 2
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试使用包含相同字符串内容的6a 访问键,它会引用正确的值,但我无法调用返回对象上的任何成员。.我必须在这里使用传统的数组访问器:
$table.6 # =====> 10.11.12.13
# =====> 10.11.12.14
$table.6.Count # =====> ParserError:
# =====> Line |
# =====> 1 | $hi.6.Count
# =====> | ~
# =====> | Missing property name after reference operator.
$table[6].Count # =====> …Run Code Online (Sandbox Code Playgroud) 背景:我们的一个团队有一个 Chocolatey 包,调用Expand-Archive. 但是,我pscx安装的模块还提供了一个Expand-Archivecmdlet,其参数签名与内置 cmdlet 不同,并导致此包安装失败。解决方案是在出现此类重载的情况下使用模块限定名称。最后能够查看在线文档来获取模块名称的价值。
最初,我尝试使用以下方法获取模块:
Get-Command Expand-Archive -All
Run Code Online (Sandbox Code Playgroud)
但这仅列出了pscx模块中找到的 cmdlet。似乎Get-Command -All 不会从尚未加载的可用模块返回命令。这对于无法自动加载的模块来说有点有意义,但对于像 之类的内置模块来说则不然Microsoft.PowerShell.Archive,这是令人担忧的,因为它使我无法在不先加载模块的情况下审核会话中的可用命令。
一旦我使用以下方法之一加载模块:
Microsoft.PowerShell.Archive\Expand-Archive
Import-Module Microsoft.PowerShell.Archive
Run Code Online (Sandbox Code Playgroud)
Get-Command Expand-Archive -All确实按解析顺序显示了两个定义以及它们所属的模块。但这是有问题的,因为它限制了我审核系统上可用命令的能力,而不是在运行之前盲目导入所有可用模块Get-Command(这本身就是一个有问题的解决方案)。
问题:我如何才能告诉实际检索会话可用的所有可解析命令,或通过其他方式获取此信息Get-Command?由于模块是根据其功能之一的第一次使用自动导入的(有人知道该命令位于卸载的模块中以进行导入),我希望应该能够支持这一点。Get-Command
我需要通过命令行将文件上传到 OneDrive。这将通过分发给最终用户的批处理文件来完成。
\n通过在 Stack Overflow 上搜索,我发现了类似这样的问题,其中提到您需要使用 Azure 注册应用程序并创建应用程序密码。我没有在我工作的组织中执行此操作所需的权限,也无法执行任何需要管理员帐户的操作。所以我无法安装任何软件 - 我必须使用 Windows 10 附带的软件。我也无法使用 VBA,因为它被阻止了。
\n我已经成功地从 OneDrive 下载文件,没有任何类似的东西,使用此处描述的过程:
\n\n\n\n
\n- 在任一浏览器中打开 URL。
\n- 使用 Ctrl+Shift+I 打开开发人员选项。
\n- 转到网络选项卡。
\n- 现在点击下载。不需要保存文件\xe2\x80\x99。我们只需要浏览器从服务器请求文件时的网络活动。
\n- 将出现一个新条目,类似于 \xe2\x80\x9cdownload.aspx?\xe2\x80\xa6\xe2\x80\x9d。
\n- 右键单击该 和
\nCopy \xe2\x86\x92 Copy as cURL。- 将复制的内容直接粘贴到终端中,并追加 \xe2\x80\x98--output file.extension\xe2\x80\x99 将内容保存在 file.extension 中,因为\n终端无法显示二进制文件数据。
\n例子:
\nRun Code Online (Sandbox Code Playgroud)\ncurl https://xyz.sharepoint.com/personal/someting/_layouts/15/download.aspx?UniqueId=cefb6082%2D696e%2D4f23%2D8c7a%2\n\xe2\x80\xa6。一些长文本 \xe2\x80\xa6.\ncCtHR3NuTy82bWFtN1JBRXNlV2ZmekZOdWp3cFRsNTdJdjE2c2syZmxQamhGWnMwdkFBeXZlNWx2UkxDTkJic2hycGNGazVSTnJGUnY1Y1d0WjF5SDJMWHBqTjRmcUNUU WJxVnZYb1JjRG1WbEtjK0VIVWx2clBDQWNyZldid1R3PT08L1NQPg==;\ncucg=1\xe2\x80\x99 --压缩--输出文件.扩展名
\n
在浏览器上单击“上传”后,我尝试执行类似的操作,但在尝试过滤请求时没有找到任何有用的东西。
\n我找到了这 两个问题,但没有上传键盘快捷键,AFAICT。此外,最终用户还将文件上传到我从 OneDrive 与他们共享的文件夹中。将 Chrome 或 Edge 作为最小化窗口打开很好,但我不能只是将一个窗口推到他们面前,自动点击一些东西 …
powershell ×6
c# ×2
vbscript ×2
batch-file ×1
csv ×1
curl ×1
debugging ×1
file-upload ×1
filter ×1
git ×1
onedrive ×1
scriptblock ×1
svn ×1
windows ×1