mysql - 从计划任务执行 Powershell 脚本不会在数据库中创建表
问题描述
我正在做一个小项目,我想执行一个执行另一个脚本的 powershell 脚本。当我自己执行主脚本时,它可以正常工作,删除表并创建新的,而当我执行“计划任务”脚本时,它会更新第一个表(播放列表)并且不会删除它,只是将其内容加倍. 而第二张表(歌曲)它甚至没有删除或放入任何内容。
这是我的计划任务脚本:
$Trigger= New-ScheduledTaskTrigger -At 04:18pm -Daily
$User= "NT AUTHORITY\SYSTEM"
$Action= New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument
"C:\Users\Matej\Desktop\getAllData.ps1"
Register-ScheduledTask -TaskName "StartupScript_PS" -Trigger $Trigger -User $User -
Action $Action -RunLevel Highest –Force
这是我的主要脚本:
Invoke-SqlCmd -ServerInstance 'localhost' -inputfile
C:\Users\Matej\Desktop\SQLQuery.sql
function insertToDb($line, $PlaylistId){
$position = $line.ToString().Split(',').Get(0)
$songName = $line.ToString().Split(',').Get(1)
$artistName = $line.ToString().Split(',').Get(2)
$link = $line.ToString().Split(',').Get(4)
$PlaylistId = $PlaylistId.Replace('"',"")
$songName = $songName.Replace('"',"")
$artistName = $artistName.Replace('"',"")
$songName = $songName.Replace("'","")
$artistName = $artistName.Replace("'","")
$convertedId = [int]($PlaylistId)
$insertSongQuery = "
INSERT INTO SONG
(position,name,artist,link,playlist_id)
VALUES
('$position',N'$songName',N'$artistName','$link','$convertedId')
GO
"
Write-Output $songName
if($line.ToString().Split(',').Length -eq 5)
{
Invoke-SQLcmd -ServerInstance 'localhost' -query $insertSongQuery -U vikiUser -
Password 1234 -Database ProjectDb
}
}
function getPlaylist{
$shortName = $PSItem.ToString().Split(',').Get(0);
$name = $PSItem.ToString().Split(',').Get(1);
$insertquery = "
INSERT INTO PLAYLIST
(name, type)
VALUES
('$name','country')
GO
"
$getPlaylistIdQuery = "
SELECT ID
FROM PLAYLIST
WHERE PLAYLIST.name = '$name'
GO
"
Invoke-SQLcmd -ServerInstance 'localhost' -query $insertquery -U vikiUser -Password
1234 -Database ProjectDb
$convertedid =(Invoke-SQLcmd -ServerInstance 'localhost' -query $getPlaylistIdQuery -
U
vikiUser -Password 1234 -Database ProjectDb )| ConvertTo-Csv | Select-Object -Skip 2
(Invoke-WebRequest -Uri
https://spotifycharts.com/regional/$shortName/daily/latest/download).Content >
out.csv
cat out.csv | Select-Object -Skip 2 | select -First 15 | ForEach-Object {insertToDb
$_
$convertedid}
}
cat C:\Users\Matej\Desktop\countries.txt | ForEach-Object {getPlaylist($_)}
这是我的 SQL 脚本:
IF DB_ID('ProjectDb') IS NOT NULL
BEGIN
use ProjectDb;
DROP TABLE SONG;
DROP TABLE PLAYLIST;
END
ELSE
BEGIN
CREATE DATABASE ProjectDb;
END
GO
CREATE TABLE PLAYLIST(
ID int IDENTITY(0,1) PRIMARY KEY,
name nvarchar(255),
type nvarchar(255),
);
CREATE TABLE SONG(
ID int IDENTITY(0,1) PRIMARY KEY,
position nvarchar(255),
name nvarchar(255),
artist nvarchar(255),
link nvarchar(255),
playlist_id int NOT NULL FOREIGN KEY REFERENCES PLAYLIST(ID)
);
解决方案
推荐阅读
- javascript - 有没有办法调试 React.js 组件?
- android - Android如何将视频流式传输到远程服务器
- python - valueerror: 你还需要提供一个phone_code_hash
- powershell - 添加检查 CSV 中是否已存在 ExternalEmailAddress 以及它是否不执行任何操作
- python - 具有 pytest 依赖关系的会话范围
- firebase - Firebase 数据每天导出到 Bigquery 的时间是什么时候?
- list - 如何在 Flutter 中插入项目
- linux - 僵尸进程对嵌入式 linux 的影响
- java - Java - NavigableMap,它返回一个仿函数,它返回一个双精度
- php - 如何在 Symfony 5 中覆盖 TraceableAdapter