powershell 从文本文件抓取文本到剪贴板时,曾经文件被更改

vuktfyat  于 2023-03-02  发布在  Shell
关注(0)|答案(2)|浏览(168)

我连接的服务器不允许复制粘贴。有一个共享驱动器可以从两者访问。我在本地端编写了一个脚本,以便在复制内容时将剪贴板转储到文本文件中。在远程端反转它时遇到问题。我正在尝试监视文件,如果它看到LastWriteTime更改,则获取txt并将其转储到远程剪贴板中。但是,看起来无论我怎么尝试,它都是在写LastWriteTime而不是在读。下面是我的代码...

$copypath = "sharedrive\copy.txt"
$lastModifiedDate = Get-Item $copypath | select -Property LastWriteTime

for()
{
#$dateA = $lastModifiedDate 
$dateB = Get-ChildItem -Path $copypath $_.LastWriteTime

if ($dateA -ne $dateB) {
 get-content $copypath|set-clipboard
 $lastModifiedDate = (Get-Item $copypath).LastWriteTime
 }
}

已尝试获取项目$copypath|select -属性上次写入时间和获取子项-路径$copypath $_.上次写入时间以及上次访问时间

a6b3iqyw

a6b3iqyw1#

在你的代码中,你尝试用三种不同的方法访问LastWriteTime,但是只有第三种方法是正确的。

$copypath = "sharedrive\copy.txt"
$lastDate = (Get-Item $copypath).LastWriteTime

for() {
    $currentDate = (Get-Item $copypath).LastWriteTime

    if ($currentDate -ne $lastDate) {
        Get-Content $copypath | Set-Clipboard
        $lastDate = $currentDate
    }
}

Select-Object的替代方法是:

Get-Item $copypath | Select-Object -ExpandProperty LastWriteTime

补充说明:无限循环的开销非常大。请添加休眠时间或改用文件系统监视器。

u0sqgete

u0sqgete2#

如果保留原始示例而不使用Select-Object,则可以使用FileInfo中的.Refresh()方法:

# store the FileInfo
$file = Get-Item $copypath
# store its LastWriteTime
$date = $file.LastWriteTime

# infinite loop
for() {
    # refresh the instance
    $file.Refresh()
    # if the dates are not equal
    if($date -ne $file.LastWriteTime) {
        # read the file and set clipboard
        $file | Get-Content -Raw | Set-Clipboard
        # update the new LastWriteTime
        $date = $file.LastWriteTime
    }
    # should use sleep here
    Start-Sleep -Milliseconds 300
}

相关问题