我先说昨天这是我第一次看到Powershell。
我正在尝试创建一个脚本,根据其运行时间来终止进程“pptview”。具体来说,我可以同时运行几个pptview实例,但我只想杀死那个运行时间最长的实例。
到目前为止,我已经创建了一个脚本,用于搜索是否存在重复的进程实例。如果它没有找到任何它进入睡眠状态60秒,那么再次检查。
我正在使用taskkill通过PID终止进程 - 效果很好。
我坚持的一点是如何确定哪个是运行时间最长的实例以及如何获取PID以便我可以将其反馈给taskkill。
答案 0 :(得分:1)
您不必使用Stop-Process
来终止进程。您可以改用StartTime
PowerShell cmdlet。要查找运行时间最长的流程,您可以按Get-Process pptview|
Sort-Object StartTime|
Select-Object -First 1|
Stop-Process
对流程进行排序,然后选择第一个流程:
Get-Process pptview|
Sort-Object StartTime -Descending|
Select-Object -Skip 1|
Stop-Process
但有些事情告诉我,你想要阻止除最年轻者之外的所有人:
--Table with list of string names
Create table strings (string_id number,string_name varchar2(2000) );
--Table to store new string names in random order
Create table new_table (string_id number,string_name varchar2(2000) );
--Function to generate random numbers
create or replace function random(p_number in number)
return number
is
a number;
begin
select dbms_random.value(1,10) into a
from dual;
a := floor(a);
return a;
end;
/
delete from strings;
delete from new_table;
insert into strings values(1,'abc');
insert into strings values(2,'def');
insert into strings values(3,'ghi');
insert into strings values(4,'abc 1');
insert into strings values(5,'def 1');
insert into strings values(6,'ghi 1');
insert into strings values(7,'abc 2');
insert into strings values(8,'def 2');
insert into strings values(9,'ghi 2');
insert into strings values(10,'xyz 3');
--Procedure to pick string names randomly from strings table and insert into new_table
create or replace procedure proc_string(p_no in number)
as
s_id number;
s_name varchar2(2000);
begin
select random(1) into s_id from dual;
select string_name into s_name from strings where string_id = s_id;
insert into New_table values(s_id,s_name);
dbms_output.put_line('insert successfully completed');
commit;
Exception when others
then dbms_output.put_line('ERROR:' || SQLCODE || ' ' || SQLERRM);
end;
/
commit;