标签: powershell

如何使用 PowerShell 和/或 Python 重新启动路由器?

如何使用PowerShell重启路由器?

\n

我的电脑使用网线连接到路由器,路由器充当调制解调器,它通过 PPPoE 连接到 ISP,我的电脑位于 NAT 之后。

\n

我的路由器型号:华为HS8545M,局域网地址:192.168.1.1,网页管理员登录名:CMCCAdmin,网页管理员密码:aDm8H%MdA。

\n

我必须执行以下操作才能重新启动路由器(总共点击 7 次,浏览器会记住登录名和密码):

\n

在此输入图像描述

\n

在此输入图像描述

\n

步骤太多了。

\n

我尝试过使用这种方法:

\n
$ie = New-Object -ComObject \'internetExplorer.Application\'\n$ie.Navigate "https://192.168.1.1"\n
Run Code Online (Sandbox Code Playgroud)\n

但过了一会儿就失去了联系.Document为空,尝试刷新会导致此错误:

\n
OperationStopped: The RPC server is unavailable. (0x800706BA)\n
Run Code Online (Sandbox Code Playgroud)\n

我使用的是 Windows 10 20H2,我禁用了远程桌面、远程协助、远程注册表、Windows 远程管理和许多其他功能,我禁用了远程功能,因为它们对安全构成威胁,我认为它们与此相关;顺便一提,RPC服务正在运行。

\n

谁能帮我?

\n
\n

第一页源代码: page1.html

\n

第二页源代码: page2.html

\n

这应该很简单,登录192.168.1.1,创建一个cookie,然后使用cookie进入192.168.1.1/index.asp,提交Restart_button,工作完成,但是我不太熟悉处理网络的命令...

\n
\n

我目前正在寻找Python的方式,我使用的是Python 3.9.1 amd64,我很早就把它放在PATH中,我已经通过pip安装了Selenium和Twill。下载GeckoDriver.exe并将其解压到Python安装文件夹中;

\n

我知道 selenium、twill、urllib、urllib2、cookielib 和 webbot,都能够做到这一点,我目前正在尝试找出如何以最好的方式做到这一点。

\n
\n

我已经成功通过 twill 在 Python 中登录路由器,但是我不知道下一步该做什么:

\n
from twill.commands import *\ngo(\'http://192.168.1.1\')\nshowforms()\nfv("1","txt_Username","CMCCAdmin")\nfv("1","txt_Password","aDm8H%MdA")\nshowforms()\nsubmit(\'btnSubmit\')\ngo("http://192.168.1.1/index.asp")\n …
Run Code Online (Sandbox Code Playgroud)

networking router powershell python windows-10

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

Powershell - 检测是否以交互模式运行

是否可以从 powershell 配置文件中检测 powershell 是否已被交互调用?我看到有些人使用$host.name但它似乎总是返回ConsoleHost

powershell

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

PowerShell Desktop 和 PowerShell Core 有什么区别

正如标题所说:PowerShell 5.1 和 PowerShell 7 有什么区别?

powershell

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

任务计划程序似乎没有像它应该的那样运行powershell脚本

我将以下 PowerShell 脚本保存为 test.ps1:

# test script
Write-Output "z" >> C:\path\to\log.txt
Run Code Online (Sandbox Code Playgroud)

在任务计划中,我将其设置为“无论用户是否登录都运行”。

触发器是“一次”,但我选中了“重复任务间隔: ”并设置为“ 5 分钟”。

在“操作”选项卡中,我有一个操作 - “启动程序”设置为“ powershell.exe ”,“添加参数(可选) ”设置为“ -file c:\path\to\test.ps1 ”和“启动于(可选) “设置为” c:\path\to ”。

在“历史记录”选项卡中我看到:

任务计划程序在任务“\test”的实例“{a1485114-69fe-4aa8-95ee-27d8f260591a}”中启动了操作“powershell.exe”。

所以看起来它对我有用,但 log.txt 既没有被创建也没有添加到。

有任何想法吗?

powershell scheduled-tasks windows-task-scheduler windows-10

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

在 Powershell Core 中绕过所有 Web 请求的代理

我有一台在企业环境中运行 Windows 的工作计算机,并带有用于 Internet 传出连接的身份验证代理服务器。我不知道它是如何配置的,但是很多工具无法连接,主要是像npm(Atom编辑器中的包),NuGet,PowerShellGet等类型。我什至必须配置我的浏览器(Vivaldi)才能使用直接连接,因为我无法登录某些网站,即使它在 MS Edge 中运行。

HTTP 错误通常是(407) Proxy Authentication Required.

Windows 中的系统范围代理服务器正在由一些定期执行的脚本进行配置,我对此无能为力。

解决方案,或者更确切地说是一种解决方法,是单独配置所有有连接问题的应用程序以绕过代理(使用直接连接到互联网)。我已经设法做到了几乎所有我需要的东西,但到目前为止我在 Powershell Core 上还没有成功。

顺便说一句,我不确定该代理的意义是什么,当你可以简单地绕过它时,它只会使该计算机上的常规工作变得更加困难,并且浪费我的时间和公司的金钱。

到目前为止,我已经了解了以下内容。

PowerShellGetFind-Module失败并出现以下错误:

无法解析包源“https://www.powershellgallery.com/api/v2”

一个简单的 Web 请求失败,并出现错误“缓存访问被拒绝”:

Invoke-WebRequest https://google.com
Run Code Online (Sandbox Code Playgroud)

但当它被迫绕过代理时会成功:

Invoke-WebRequest https://google.com -NoProxy
Run Code Online (Sandbox Code Playgroud)

netsh winhttp show proxy说“直接访问(无代理服务器)。 ”,但以下命令返回实际代理:

([System.Net.WebRequest]::GetSystemWebproxy()).GetProxy("https://google.com")
Run Code Online (Sandbox Code Playgroud)

此外,以下命令返回false

([System.Net.WebRequest]::GetSystemWebproxy()).IsBypassed("https://google.com")
Run Code Online (Sandbox Code Playgroud)

我做了相当广泛的研究,发现应该可以WebRequest通过将默认代理设置为 null 来配置使用直接连接,但这没有帮助:

[System.Net.WebRequest]::DefaultWebProxy = $null
Run Code Online (Sandbox Code Playgroud)

如果有人有任何其他想法,我将不胜感激。

更新

我发现我实际上可以使用我的域帐户在代理服务器上进行身份验证:

Invoke-WebRequest https://google.com -ProxyUseDefaultCredentials -Proxy http://proxy
Run Code Online (Sandbox Code Playgroud)

因此,这将是代理旁路配置的替代方案。我只是不知道如何为 Powershell 发出的所有请求设置凭据。我不明白为什么 Windows 系统代理没有配置为使用我的帐户进行身份验证。

我尝试配置WebRequest::DefaultWebProxy为使用代理服务器并使用我的域帐户凭据对其进行身份验证,但它不起作用:

Invoke-WebRequest https://google.com
Run Code Online (Sandbox Code Playgroud)

internet powershell proxy powershell-core

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

在 PowerShell 中收集完整的历史 Windows 更新历史记录

我试图使用 PowerShell 根据设置应用程序获取系统曾经安装的所有更新的列表,最终目标是两者之间进行 1:1 比较。
懒惰的技术博客将为您提供以下其中一项,它会轮询 Win32_QuickFixEngineering WMI 位置:

get-hotfix
wmic qfe list full
get-wmiobject win32_quickfixengineering
Run Code Online (Sandbox Code Playgroud)

但这并不能说明一切。根据微软的说法:

从 Windows Vista 开始,此类仅返回 Microsoft Windows Installer (MSI)、Windows Update、Microsoft Update 或 Windows Server Update Services 提供的更新。它不包括由基于组件的服务 (CBS) 或其他非修补程序或应用程序提供的更新。

为了补充这一点,您经常会看到与 PowerShell 中的“Windows.Update.Session”COM 对象交互的代码块执行类似的操作以获得已安装更新的(不同)列表:

$Session = New-Object -ComObject Microsoft.Update.Session
$Searcher = $Session.CreateUpdateSearcher()
$historyCount = $Searcher.GetTotalHistoryCount()
Run Code Online (Sandbox Code Playgroud)

但即使这样也无法获取完整的历史列表——我想是因为从中提取的列表是对作为累积安装的更新进行重复删除,并省略了为早期版本的 Windows 安装的更新。然而, “设置”
应用程序列出了一年多前在我的设备上安装的内容:

2020 年安装的更新列表

有没有办法使用 PowerShell 访问列表?设置从哪里获取它?

windows-update powershell

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

(PowerShell) Invoke-WebRequest:忽略 404,只需给我响应数据

我正在尝试抓取此网页,因为没有其他方法可以在其内容更改时自动收到警报:

https://airsdk.harman.com/runtime

使用 cURL 可以很好地下载页面(此时可以解析其内容),但使用 Invoke-WebRequest 或 System.Net.WebClient 的 DownloadFile/DownloadString 方法会导致出现错误,表示 Web 服务器返回了 404错误。
检查 Chrome 确认页面始终以 404 响应,但也返回内容,这正是我想要的。

使用 PowerShell 5.1,有没有办法指示 Invoke-WebRequest 忽略虚假的 404 错误,或者有某种方法可以让我无论如何都可以获取响应数据?

windows powershell

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

从 Windows 应用商店安装的 Powershell(核心)位于哪里?

我从 Windows 应用商店安装了 Powershell。我想在 VS Code 中使用它作为我的终端,但它找不到 PS。

Powershell 位于哪里?

powershell windows-store-app

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

如何将 Get-ChildItem 的一个结果存储为一个数组值?

我有一个名为 D:\MyDir 的文件夹,这是其内容:

PS D:\MyDir> gci


    Directory: D:\MyDir


Mode                LastWriteTime         Length Name
----                -------------         ------ ---- d-----       11/22/2021   8:10 PM                MyFolder-2021-11-22
Run Code Online (Sandbox Code Playgroud)

我将按 creatin 排序的文件夹名称存储在 $Dirlist 上:

$Dirlist = gci $LBDestination | ? { $_.PSIsContainer } | sort CreationTime | select -Property Name | foreach { $_.Name }
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是系统将列表中的每个字母存储为数组中的一个值

PS D:\MyDir> $Dirlist[0..3]
M
y
F
o
Run Code Online (Sandbox Code Playgroud)

当我有多个文件夹时,我的脚本工作正常。

powershell

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

仅在使用 sc.exe 查询时返回服务状态

当使用以下命令将有关服务的信息返回到文件时:

sc.exe query MyService >> MyFileLocation\MyFile.txt
Run Code Online (Sandbox Code Playgroud)

我在文件中得到以下信息:

SERVICE_NAME: MyService 
        TYPE               : 10  WIN32_OWN_PROCESS  
        STATE              : 4  RUNNING 
                                (STOPPABLE, NOT_PAUSABLE, ACCEPTS_SHUTDOWN)
        WIN32_EXIT_CODE    : 0  (0x0)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x0
Run Code Online (Sandbox Code Playgroud)

但我只需要国家。我已经检查了文档中的属性:

https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/sc-query

但我找不到任何可以让我返回状态的东西。是否可以这样做?如果可以,该如何做?提前致谢。

services powershell query

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